标签: naturalid

JPA相当于Hibernate的@NaturalId

在Hibernate中,我可以使用@NaturalId实体的几个属性创建一个唯一键.

是否有JPA等效注释,是什么的一部分javax.persistence

hibernate jpa naturalid

9
推荐指数
2
解决办法
7866
查看次数

Hibernate @ManyToOne引用类使用@NaturalId而不是@Id

我有一些Hibernate/JPA注释(实际上仍然不知道区别)允许我创建一个关联类.此类将两个与一个对象相关的项组合在一起.我最初使用@JoinTable但是意识到我需要更多关于元数据的元数据,因此必须将代码转换为另一种对象类型.

现在我@Id用来标记ID我的对象的列,并@NaturalId (mutable = false)用于a String uuid.

我的关联类正在使用@ManyToOne并创建表,但是当我查看它时,表使用该@Id字段作为映射列.我更希望这个关联类使用@NaturalId uuid易于将关系/关联传递到其他系统.

如何让关系使用正确的标识符?

作为参考,我的DB和Java代码如下所示:

AssociationsTable
----------------------------------------------
| ID | META DATA | ID ASSOC. 1 | ID ASSOC. 2 |
----------------------------------------------
| 1  |  stuff    |    1        |     2       |
----------------------------------------------

Objects
------------------------------
| ID | META DATA | UUID      | 
------------------------------
| 1  |  stuff    |  FOO-123  |
------------------------------
| 2  |  stuff    |  BAR-456  |
------------------------------ …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa naturalid

6
推荐指数
1
解决办法
1751
查看次数

Hibernate 5.2 从元模型中获取自然 id 属性

由于SessionFactory#getClassMetadata(java.lang.Class)已弃用,我无法使用ClassMetadata。我想访问以下方法:

  • org.hibernate.metadata.ClassMetadata#getNaturalIdentifierProperties
  • org.hibernate.metadata.ClassMetadata#hasNaturalIdentifier

根据文档,我应该用 EntityManagerFactory.getMetamodel() 替换 getClassMetada。但是,元模型不包含获取自然 ID 的方法。我正在使用自然 ID 的 xml 映射,我想获取自然 ID 的属性名称以创建动态查询。

<class name="User">
  <cache usage="read-write"/>
  <id name="id">
    <generator class="increment"/>
  </id>
  <natural-id>
    <property name="name"/>
    <property name="org"/>
  </natural-id>
  <property name="password"/>
</class>
Run Code Online (Sandbox Code Playgroud)
  • 有没有办法使用这些方法来获得自然的 id 映射?
  • 还有另一种方法来获取 ClassMetadata 实例吗?
  • 是否有可能获得一个实例entityMetamodel来替换 ClassMetadata?

java metadata metamodel naturalid hibernate-5.x

4
推荐指数
1
解决办法
3266
查看次数

标签 统计

naturalid ×3

hibernate ×2

java ×2

jpa ×2

hibernate-5.x ×1

metadata ×1

metamodel ×1