当前位置: 首页 > 面试题库 >

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

景志
2023-03-14
问题内容

对于每个@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来实现@Entity。我可以使用什么类来引用每个JPA实体?我可以只创建一个接口/抽象类MyEntities并让它们全部继承,但是这样吗?我希望更少的代码。另外,我希望能够提取每个实体的主键,就像我在.getId()中尝试的那样。


问题答案:

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

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


 类似资料:
  • 我有vehicleId和vehicleName的值,我想从这两个属性值中获取User对象。 我不想创建一个车辆存储库仅仅是为了找到用户对象,我知道可以通过创建一个车辆存储库来实现,它扩展了springdatajpa中的JPA存储库。

  • 问题内容: 但是,首选解决方案(属性访问)在我的情况下不起作用(我缺少列异常-为什么?) 该模型如下所示:实体和。表含有列是的表,以便它是典型的关系。 现在的问题是,如果我取的实体,我需要有机会获得价值(亦称的实体),而不取实体。我怎样才能做到这一点? 我使用的映射如下所示: 我想做的是调用而无需从DB中额外获取实体。 根据我上面提到的答案,如果我将注释从字段移到getter(在实体上,我对吗?)

  • 我将JPA2与Hibernate一起使用。有两个实体类,和。最后一个是第一个的继承实体。使用SINGLE_TABLE继承策略。当我尝试通过从id=“123456”的CardElement中查询

  • 我将JPA与Hibernate和QueryDSL(v.4.0.5)一起使用。我拥有以下实体: 如何找到与给定标记集匹配的所有文章?我想我应该从以下几点开始: 其中,ce应为集合表达式。很明显,我不知道如何设置这个。 有什么解决方案吗?

  • 问题内容: 我正在寻找一种聪明且易于理解的方法来使用获取持久化实体的ID 。ID是。 可以想到以下解决方案: 没有使用策略。这要求在保留之前先查找一个免费的id,然后将其放入要保留的实体中:麻烦,但可以。 有策略。持久性提供程序将负责生成id。这看起来更聪明,但是如何获取ID? 请参阅下面的解决方案2 这会显示一个空ID! 有什么建议?我正在使用MySql,EclipseLink,但需要一个可移植

  • 问题内容: 有没有办法从mysql-database获取主键字段的名称?例如: 我有一张这样的桌子: 其中字段ID是主键(它具有自动递增功能,但我不能使用它)。如何在php中检索字段名称“ id”? 问题答案: 一种更好的方法是使用,因为您并不总是可以访问information_schema。以下作品: Column_name将包含主键的名称。