我遇到了一個非常奇怪的情況。當我嘗試在後面立即刪除一組實體&時嘗試添加另一組實體,這些實體可能也可能不再有相同的元素,我似乎正在獲得以下例外。整個堆棧跟蹤不是必需的,因爲它不會說太多。解決JPA/Hibernate EntityNotFoundException
javax.persistence.EntityNotFoundException: deleted entity passed to persist [com.test.MyEntity#<null>]
爲了讓自己更清楚,讓我給出更詳細的解釋。
這是我的實體。
@Entity
@Table(name = "MY_ENTITY")
@SequenceGenerator(name = "my_enty_seq", sequenceName = "MY_ENTITY_SEQ")
public class MyEntity {
private long id;
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "my_enty_seq")
@Column(name = "ID", unique = true, nullable = false, precision = 12, scale = 0)
public long getId() {
return this.id;
}
// Other methods & variables which are not relevant here.
}
這是玩實體的類。
public class MyEntityServiceImpl implements MyEntityService {
public void updateMyEntities(List<MyEntity> newEntities) {
// Delete the Old Items
List<MyEntity> oldEntities = myDAO.getAllEntities();
myDAO.delete(oldEntities); // myDAO extends GenericDaoJpaWithoutJpaTemplate, hence, the DELETE is available in it.
// Add the New Items
myDAO.store(newEntities); // This is where I get the mentioned Exception.
}
// Other non-relevant stuffs
}
從哪裏獲得的store()
方法所提到的例外的情況是有一些共同的MyEntity
對象,同時存在於oldEntities和newEntities名單。
我已經嘗試了很多事情來完成這項工作,但沒有任何東西可以幫助我解決問題。添加FetchType.EAGER
& CascaseType.ALL, CascaseType.PERSIST
也沒有工作。 jpa EntityManager
似乎也沒有commit()
方法,我可以在store()
方法之前的delete()
&之後使用。我試過與交換store()
(雖然店內也叫persist()
)!
注意: -需要刪除舊列表並插入新列表,因爲比較元素並只添加新元素是很繁瑣的(列表可能有時非常龐大)。
一個提交只是在實際提交事務之前進行刷新。 – 2013-05-13 05:52:47