sim*_*ico 13 java eclipselink jpa-2.0
对于每个@Entity,我需要执行以下操作:
public <Entity> boolean insert(final Entity entity){
if (em.find(entity.getClass(), entity.getId()) == null) {
et.begin();
em.persist(entity);
et.commit();
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果实体不存在,那就是持久存在,并知道它是否存在.有了实体,我正试图到达@Entity,虽然我意识到这不是继承关系.我可以用什么类来引用每个JPA实体?我可以创建一个接口/抽象类MyEntities并让所有这些继承,但是这样吗?我希望减少代码.此外,当我尝试使用.getId()时,我希望能够提取每个实体的主键.
Gor*_*rke 40
此功能已在JPA 2.0中添加.只需致电:
Object id = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity);
Run Code Online (Sandbox Code Playgroud)
阅读有关Generic Dao方法的文章.
我不清楚你的问题,但如果你想获得实体ID - 只需得到它.在持久化方法完成后可用
em.persist(entity);
et.commit();
int id = entity.getId()
Run Code Online (Sandbox Code Playgroud)
我通常AbstractEntity使用字段id及其访问器创建一个类,并继承此类中的所有其他实体.
这种方法的唯一问题是,如果您需要使您的任何实体Serializable,您将不得不进行AbstractEntity序列化,即所有其他实体将变为可序列化.否则,字段id将不会在应该可序列化的实体中序列化.
通用接口方法是我使用的,并且工作正常。使用纯 JPA 我看不到获取标识符的方法。
Have a look at merge(). I've not used it much myself but I think
Hibernate has ways of doing this
Serializable id = session.getIdentifier(entity);
Run Code Online (Sandbox Code Playgroud)
But this is not JPA standard.