2012-05-13 49 views
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

回答

1

因爲你試圖堅持CommentEntity有兩種userEntity或postEntity(或兩者)引用到不堅持的實體。調用em.persist(commentEntity的實例)不會導致這些實體被持久化,因爲級聯僅刷新。您應該堅持這些實體分別致電em.persist

如果這不能回答您的問題,請提供創建實體並堅持它們的代碼。

+0

嗨...我編輯了我的問題.... – user746458

+0

您已編輯過,但仍未顯示CommentEntity在引用時仍然引用的內容。因爲它的關係並沒有被設置爲級聯,如果它引用了任何新的實體(例如postEntity的新實例,它們沒有被執行,而如果你堅持實體後,它會和新的CommentEntity關係級聯。實體在設置關係之前或更改級聯設置,以便持久層疊到所有需要的新實體。 – Chris

相關問題