0
我試圖堅持以下實體:實體對象沒有得到持久化的:新的對象是通過沒有標記的關係發現
public class CommentEntity {
@Id
@ManyToOne(optional=false,cascade=CascadeType.REFRESH, targetEntity=UserEntity.class)
@JoinColumn(name="USERID",referencedColumnName="USERID")
private UserEntity userEntity;
@ManyToOne(optional=false,cascade=CascadeType.REFRESH, targetEntity=PostEntity.class)
@JoinColumn(name="POSTID",referencedColumnName="POSTID")
private PostEntity postEntity;
}
但錯誤出來:
在同步的新對象是通過未標記爲級聯的關係發現的PERSIST:[email protected]。
當我嘗試堅持PostEntity時,它被堅持。沒有這樣的例外:
public class PostEntity {
@ManyToOne(optional = false, cascade = CascadeType.REFRESH, fetch = FetchType.LAZY, targetEntity = UserEntity.class)
@JoinColumn(name = "USERID", referencedColumnName = "USERID")
private UserEntity userEntity;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "postEntity", fetch = FetchType.LAZY)
private List<CommentEntity> commentEntityList;
}
爲什麼會這樣呢? UserEntity是:
public class UserEntity {
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "userEntity")
private List<PostEntity> postEntityList;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "userEntity")
private List<CommentEntity> commentEntityList;
}
我使用的代碼堅持commentEntity:
entityManagerFactory = Persistence
.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
entityManager = entityManagerFactory.createEntityManager();
entityTransaction = entityManager.getTransaction();
entityTransaction.begin();
entityManager.persist(commentEntity);
entityTransaction.commit();
entityManager.close();
我無法理解什麼可以原因?那麼爲什麼PostEntity會在相同的情況下持續下去?
我使用的EclipseLink
嗨...我編輯了我的問題.... – user746458
您已編輯過,但仍未顯示CommentEntity在引用時仍然引用的內容。因爲它的關係並沒有被設置爲級聯,如果它引用了任何新的實體(例如postEntity的新實例,它們沒有被執行,而如果你堅持實體後,它會和新的CommentEntity關係級聯。實體在設置關係之前或更改級聯設置,以便持久層疊到所有需要的新實體。 – Chris