我有一个JPA持久对象模型,其中包含多对一关系:一个Account
具有许多Transactions
。A
Transaction
有一个Account
。
这是一段代码:
@Entity
public class Transaction {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne(cascade = {CascadeType.ALL},fetch= FetchType.EAGER)
private Account fromAccount;
....
@Entity
public class Account {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@OneToMany(cascade = {CascadeType.ALL},fetch= FetchType.EAGER, mappedBy = "fromAccount")
private Set<Transaction> transactions;
我能够创建一个Account
对象,向其中添加事务,并Account
正确地持久保存该对象。但是,当我 使用现有的已经持久化的Account
创建一个事务并持久化 该Transaction时 ,出现一个异常:
引起原因:org.hibernate.PersistentObjectException:传递给持久对象的分离实体:com.paulsanwald.Account,位于org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
因此,我能够保留Account
包含交易的,但不能保留包含的交易Account
。我以为这是因为Account
可能未附加,但是此代码仍然给我同样的异常:
if (account.getId()!=null) {
account = entityManager.merge(account);
}
Transaction transaction = new Transaction(account,"other stuff");
// the below fails with a "detached entity" message. why?
entityManager.persist(transaction);
如何正确保存Transaction
与已经存在的Account
对象关联的?
这是一个典型的双向一致性问题。在此链接以及此链接中都进行了很好的讨论。
根据前面2个链接中的文章,您需要在双向关系的两侧修复设置器。此链接中有一个用于一侧的设置器示例。
此链接中提供了很多方面的示例设置器。
在更正了设置者之后,您想要将实体访问类型声明为“属性”。声明“属性”访问类型的最佳实践是将所有注释从成员属性移至相应的getter。一个大的警告是不要在实体类中混合使用“字段”和“属性”访问类型,否则JSR-317规范未定义其行为。
我有一个JPA持久化的对象模型,它包含多对一的关系:一个有许多。一个有一个。 下面是代码片段: 我能够创建对象,向其添加事务,并正确地持久化对象。但是,当我创建一个事务,使用一个现有的已经持久化的帐户,并持久化该事务时,我会得到一个异常: 原因:org.hibernate.PersistentObjectException:已分离的实体传递给Persist:com.PaulSanwald.Acco
我正试图实现与hibernate的许多单向关系。问题是,当我试图向数据库中添加一些值时,我遇到了以下错误: 运行时发生异常。null:InvocationTargetException:未能执行ApplicationRunner:传递给persist:dnd35cg的分离实体。模型DND类;嵌套的异常是org。冬眠PersistentObjectException:传递给persist:dnd35
这个网站上没有一个类似的问题能够解决我的问题。 错误:org.hibernate.persistentobjectexception:传递给persist:healthcheckapi.model.checks的分离实体 示例JSON健康对象: 请注意,这两个对象的ID都是自动生成的,我认为这是问题的一部分。
我在尝试使用Spring Data JPA和Hibernate作为JPA提供程序执行批插入操作时遇到了问题。 我有以下方法在我的服务。这就是抛出异常的地方。 Institute是一个实例变量,并提前获取。 我还将实体设置为级联、持久和合并。 为什么这段代码起作用 而此代码不
问题内容: 我正在尝试使用Hibernate EntityManagerpersist方法将个人pojo插入mysql db, 得到这个例外 还有更多.. 我的Person.java类是, 然后是pojo的getter setter方法。 引发TitleType类的错误是“公共静态最终”标题类型定义提供程序, 我正在为人员设置标题类型类, 不可能将公共静态最终类型定义的类传递给Hibernate?
我正在使用springboot jpa存储库保存方法 这是完整的错误:2020-06-09 15:49:02.371[nio-8080-exec-4]。M.M.A.ExceptionHandlerExceptionResolver:由处理程序执行导致的解析异常:org.springframework.dao.invalidDataAccessapiusageException:传递给persist