Tag: spring data jpa

无法实例化Pageable bean

我使用Spring 4.1.6.RELEASE和Spring Data Jpa 1.8.0.RELEASE。 我在org.springframework.data.domain.Pageable bean创建时遇到问题。 它在我的控制器中使用: @Controller public class ItemsController { @Autowired ProductService itemsService; @RequestMapping(value = “/openItemsPage”) public String openItemsPage() { return “items”; } @RequestMapping(value = “/getItems”, method = RequestMethod.GET) @ResponseBody public Item[] getItems(Pageable pageable) { return itemsService.getItems(pageable); } } 此外,我在我的应用程序上下文中有下一个xml配置: 最后,我做了客户的下一次requsr: $.ajax({ type: “GET”, url: “getProducts?page=0&size=100”, ….. 在tomcat日志中我看到下一个: SEVERE: Servlet.service() for servlet […]

JpaRepository缓存新创建的对象。 如何刷新?

我有一个JpaRepository在Spring MVC应用程序中持久保存新创建的实体。 这个实体看起来像这样(非常简化): @Entity public class Translation { ….. @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; @ManyToOne(fetch = FetchType.LAZY) private Version version; …. } 和版本实体: @Entity public class Version { @Id @GeneratedValue(strategy = GenerationType.AUTO) @Column(name = “id”) private long id; @Column(name = “name”) private String name; @Column(name = “version_code”) private long code; @OneToMany(fetch = FetchType.LAZY, […]

Spring-Data JPA:保存引用现有实体的新实体

问题基本上与下面的问题相同: JPA级联持久化并且对分离实体的引用会抛出PersistentObjectException。 为什么? 我正在创建一个引用现有的独立实体的新实体。 现在,当我在Spring数据存储库中保存此实体时,会抛出exception: org.springframework.dao.InvalidDataAccessApiUsageException: detached entity passed to persist 如果我们看一下spring数据JPA源代码中的save()方法,我们看到: public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } 如果我们在AbstractEntityInformation查看isNew() public boolean isNew(T entity) { return getId(entity) == null; } 所以基本上如果我保存()一个新实体(id == null) ,spring数据将始终调用persist,因此这种情况总是会失败。 在向集合添加新项目时,这似乎是一个非常典型的用例。 我该如何解决这个问题? 编辑1: 注意: 此问题与如何保存引用Spring JPA中现有实体的新实体没有直接关系? 。 详细说明假设您获得了通过http创建新实体的请求。 然后,您从请求中提取信息并创建您的实体和现有的实体。 因此,他们将永远脱离。

列名作为Spring Data JPA Query的参数

有没有办法动态地向@Query注入实体属性? 我需要实现如下方法: @Query(“select e from #{#entityName} e where e.***columnName*** = ?2”) List findAll(String ***columnName***, String value); 这样做的其他任何简单方法?

Spring Data JPA与findBy / findAllBy的区别

在以下之间使用Spring Data JPA关键字时是否有任何区别: List findBySomeCondition(); 和 List findAllBySomeCondition();

Spring Data JPA – 用于json序列化的ZonedDateTime格式

我对ZonedDateTime的json序列化有问题。 当转换为json时,它产生了一个巨大的对象,我不希望每次都传输所有数据。 所以我试着将其格式化为ISO,但它不起作用。 我怎样才能让它格式化? 这是我的实体类: @MappedSuperclass public abstract class AuditBase { @Id @GeneratedValue private Long id; @CreatedDate private ZonedDateTime createdDate; @LastModifiedDate private ZonedDateTime lastModifiedDate; @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) public ZonedDateTime getLastModifiedDate() { return lastModifiedDate; } public void setLastModifiedDate(ZonedDateTime lastModifiedDate) { this.lastModifiedDate = lastModifiedDate; } @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) public ZonedDateTime getCreatedDate() { return createdDate; } public void […]

为什么Spring数据存储库上的getOne(…)不会抛出EntityNotFoundException?

我正在处理一个奇怪的问题,我正在进行集成测试,调用我的控制器从数据库中获取一个不存在的对象。 public Optional get(Long id) { try { return Optional.ofNullable(repository.getOne(id)); } catch(EntityNotFoundException e) { return Optional.empty(); } } 当getOne(…)无法找到任何东西时,我期待一个EntityNotFoundException但实际上什么都没有。 如果我检查我的结果,我可以看到我有一个带有处理程序链接的空实体“抛出EntityNotFoundException ”但是我们不进入catch并返回这个奇怪实体的可选项。 我无法理解这种行为。

Spring JPA Repository动态查询

目前我一直在使用以下Spring JPA Repository基础自定义查询,它工作正常, @Query(“SELECT usr FROM User usr WHERE usr.configurable = TRUE ” + “AND (” + “lower(usr.name) like lower(:filterText) OR lower(usr.userType.classType.displayName) like lower(:filterText) OR lower(usr.userType.model) like lower(:filterText)” + “)” + “”) public List findByFilterText(@Param(“filterText”) String filterText, Sort sort); 当filter文本将成为逗号分隔值时,我需要修改此查询。 但是按照以下方式,它将是一个动态查询,我该如何执行它。 我需要构建动态查询, String sql = “SELECT usr FROM User usr WHERE usr.configurable = TRUE”; for(String […]

如何在Spring JPA中保存引用现有实体的新实体?

想象一下以下型号: 雇员: @ManyToMany(cascade = CascadeType.ALL) @JoinTable(name = “employee_project”, joinColumns = @JoinColumn(name = “Emp_Id”), inverseJoinColumns = @JoinColumn(name = “Proj_id”)) private Set projects = new HashSet(); 项目: @ManyToMany(mappedBy = “projects”) private Set employees = new HashSet(); 现在,如果我创建一个引用现有项目的新员工并尝试坚持该员工,我会收到一个错误: detached entity passed to persist: Project 我按如下方式创建员工: public void createNewEmployee(EmployeeDTO empDTO) { Employee emp = new Employee(); // add stuff […]

Spring JpaRepository – 分离和附加实体

我正在使用spring boot并在jpa上hibernate。 我正在使用JpaRepository接口来实现我的存储库。 与以下UserRepository一样 public interface UserRepository extends JpaRepository { } 我想实现以下目标 加载用户实体。 更改实体对象的状态,例如user.setName(“foo”) 进行外部系统Web服务调用。 将呼叫结果保存在DB中 仅在成功响应此Web服务调用时,将新用户状态保存在存储库中。 以上所有步骤都不会发生在一个事务中,即外部服务调用不在事务中。 当我通过其存储库将我的web服务结果保存在DB中时,我的用户实体更改也会保存。 根据我的理解,这是由于在步骤#3中刷新了持久性上下文。在一些谷歌之后,我想我可以实现我的目的,如果我可以在第一步分离我的用户实体并在步骤4重新连接它。请确认如果我的理解是正确的,我怎么能做到这一点? JpaRepository接口中没有用于分离实体的方法。 以下是代码来说明 public void updateUser(int id, String name, int changeReqId){ User mUser = userRepository.findOne(id); //1 mUser.setName(name); //2 ChangeRequest cr = changeRequestRepository.findOne(changeReqId); ChangeResponse rs = userWebService.updateDetails(mUser); //3 if(rs.isAccepted()){ userRepository.saveAndFlush(mUser); //4 } cr.setResponseCode(rs.getCode()); changeRequestRepository.saveAndFlush(cr); //this call also […]