如何获取任何 JPA 实体的主键?

2022-09-03 03:22:26

对于每个@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;
}

这就是如果实体不存在,就让它持续存在,并知道它是否存在。对于实体,我试图达到@Entity,尽管我意识到这不是一种继承关系。我可以使用哪个类来引用每个 JPA 实体?我可以创建一个接口/抽象类MyEntities,并让它们都继承,但这就是方法吗?我希望代码更少。另外,我希望能够提取每个实体的主键,就像我在.getId()中尝试的那样。


答案 1

此功能已添加到 JPA 2.0 中。只需致电:

Object id = entityManagerFactory.getPersistenceUnitUtil().getIdentifier(entity);

答案 2

阅读有关通用 Dao 方法的文章。

我不清楚你的问题,但如果你想得到实体ID - 只要得到它。它在持久化方法完成后可用,即

em.persist(entity);
et.commit();
int id = entity.getId()

我通常使用字段及其访问器创建一个类,并从该类继承所有其他实体。AbstractEntityid

这种方法的唯一问题是,如果您需要使任何实体可序列化,则必须使所有实体可序列化,即所有其他实体都将变为可序列化。否则,字段将不会在应可序列化的实体中序列化。AbstractEntityid


推荐