Tag: jpa

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 […]

javax.persistence.PersistenceException:没有名为customerManager的EntityManager的持久性提供程序

我是JPA和Hibernate的新手。 在阅读了一些在线资料后,我现在了解了Hibernate是什么以及它如何与JPA一起使用。 现在,我正在尝试运行此JPA和Hibernate教程 。 我已经完成了他们在本教程中提到的所有内容。 我没有Oracle DB,只有MySQL。 所以我使用我对JPA和Hibernate的理解对persistence.xml做了一些更改(我不知道它是否正确……对我而言似乎是。) 这是我的persistence.xml org.hibernate.ejb.HibernatePersistence Customer 但我似乎没有得到他们描述的输出。 它给了我: Customer id before creation:null log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version). log4j:WARN Please initialize the log4j system properly. Exception in thread “main” javax.persistence.PersistenceException: No Persistence provider for EntityManager named customerManager at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33) at CustomerDAO.create(CustomerDAO.java:8) at CustomerDAO.main(CustomerDAO.java:22) 任何建议将不胜感激。 更新: […]

JPA – 实体设计问题

我正在开发Java桌面应用程序并使用JPA进行持久化。 我有一个问题如下: 我有两个实体: 国家 市 国家/地区具有以下属性: 国名(PK) City具有以下属性: 城市名 现在由于两个不同国家/地区可能有两个同名的城市,因此数据库中City表的primaryKey是由CityName和CountryName组成的复合主键。 现在我的问题是如何将City的主键实现为Java中的Entity @Entity public class Country implements Serializable { private String countryName; @Id public String getCountryName() { return this.countryName; } } @Entity public class City implements Serializable { private CityPK cityPK; private Country country; @EmbeddedId public CityPK getCityPK() { return this.cityPK; } } @Embeddable public class […]

是什么导致org.hibernate.PropertyAccessException:setter中发生exception

是什么导致这个例外,我无法找到答案。 Request processing failed; nested exception is javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Exception occurred inside setter of my.Class 根本原因: javax.persistence.PersistenceException: org.hibernate.PropertyAccessException: Exception occurred inside setter of my.Class 码: @ManyToMany(fetch = FetchType.EAGER) public void setTags(Set tags) { this.tags.clear(); for (Tag tag : tags) { addTag(tag); } } public boolean addTag(final Tag tag) { if (tags.contains(tag)) { return false; } […]

在maven-verify中没有自动检测JPA实体

如果我将persistence.xml放在src / test / META-INF文件夹中,则自动检测实体不能与maven-verify一起使用。 当persistence.xml位于src / main / META-INF文件夹中时,它可以正常工作。 在两种情况下都可以在eclipse中运行测试。 当persistence.xml位于src / test文件夹中时,有没有办法让autodetection用于maven-verify? persistence.xml中:

jpa和hibernate之间的相似性和区别

jpa和hibernate之间的相似之处和区别是什么。

JSR303自定义validation器被调用两次

我正在使用Spring MVC创建一个网站,并且为了持久性我使用Spring Data JPA和Hibernate 4作为我的JPA提供者。 目前正在使用Hibernate Validator处理validation。 我有一个问题,我的validation器被调用两次,我无法弄清楚为什么。 这是一个问题的主要原因是因为第二轮,依赖关系没有自动连接到validation器,我得到一个空指针exception。 以下是导致失败的呼叫序列: 提交注册表单,首先调用NotDefaultSectValidator并成功完成用户对象上的“whereDidYouHearAboutUs”字段。 接下来调用UniqueUsernameValidator并成功完成“用户名”字段validation。 控制器上的’addUserFromForm’方法启动,并在bindingResults对象中找不到任何错误。 然后在UserService类上调用’addUser’方法。 此方法到达’userRepository.save(user);’行 但之后不要立即运行’print.ln’行。 单步执行此行将返回到“NotDefaultSectValidator”断点。 这是第二次完成,我重新输入第二个validation器’UniqueUsernameValidator’。 这里我得到一个空指针exception,因为出于某种原因,Spring第二次无法在DAO中自动assembly。 任何人都可以阐明为什么validation器被调用两次,特别是为什么要跨越’userRepository.save(user);’ 回到这些validation器? 非常感谢 这是我的user.java类 package com.dating.domain; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.JoinTable; import javax.persistence.ManyToMany; import javax.persistence.PrePersist; import javax.persistence.PreUpdate; import javax.persistence.Table; […]

Spring Data JPA:查询ManyToMany

我有实体User和Test @Entity public class User { private Long id; private String userName; } @Entity public class Test { private Long id; @ManyToMany private Set users; } 我可以通过用户实体获得所有测试: public interface TestRepository extends JpaRepository { List findAllByUsers(User user); } 但是我可以使用哪个查询来查找userName所有测试?

JPA where子句任何

我是JPA的新手。 在JPA中,查询是: Query query = entityManager.createQuery(“select o from Product o WHERE o.category = :value”); query.setParameter(“category”, category); 如何在JPA中将类别设置为任何类别? 因此,如果传递null类,我简单地忽略category参数,选择所有产品。

Hibernate JPA和Spring javax.persistence.TransactionRequiredException:没有事务正在进行中

我打电话的时候: entityManager.flush() 我得到标题中提到的例外。 我正在使用Hibernate JPA。