PersistentObjectException: detached entity passed to persist thrown by JPA and Hibernate

前端 未结 18 2389
醉酒成梦
醉酒成梦 2020-11-22 05:10

I have a JPA-persisted object model that contains a many-to-one relationship: an Account has many Transactions. A Transaction has one

18条回答
  •  心在旅途
    2020-11-22 05:48

    If nothing helps and you are still getting this exception, review your equals() methods - and don't include child collection in it. Especially if you have deep structure of embedded collections (e.g. A contains Bs, B contains Cs, etc.).

    In example of Account -> Transactions:

      public class Account {
    
        private Long id;
        private String accountName;
        private Set transactions;
    
        @Override
        public boolean equals(Object obj) {
          if (this == obj)
            return true;
          if (obj == null)
            return false;
          if (!(obj instanceof Account))
            return false;
          Account other = (Account) obj;
          return Objects.equals(this.id, other.id)
              && Objects.equals(this.accountName, other.accountName)
              && Objects.equals(this.transactions, other.transactions); // <--- REMOVE THIS!
        }
      }
    

    In above example remove transactions from equals() checks. This is because hibernate will imply that you are not trying to update old object, but you pass a new object to persist, whenever you change element on the child collection.
    Of course this solutions will not fit all applications and you should carefully design what you want to include in the equals and hashCode methods.

提交回复
热议问题