2012-05-18 116 views
1

如果实体被删除或管理,它将被存储(或其散列)在当前EntityManger的持久化上下文中,所以JPA知道它的状态。但是JPA实现如何知道给定的实体是新的还是独立的呢?检查@ID是否为空不会总是有效。它是JPA提供程序特定的吗? 换句话说,JPA如何知道它在合并期间需要抛出javax.persistence.EntityExistsExceptionJPA如何知道该实体是新的还是独立的?

回答

2

下面是如何Hibernate does it

  • 如果生成所述标识符,使用该标识符的存在
  • 如果没有,并且该实体被版本化(乐观锁),使用时间戳或版本
  • 如果上述不可行,则查询第二级缓存或数据库以确定标识符是否已存在。
相关问题