在Hibernate中,我可以使用@NaturalId实体的几个属性创建一个唯一键.
是否有JPA等效注释,是什么的一部分javax.persistence?
我有一些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) 由于SessionFactory#getClassMetadata(java.lang.Class)已弃用,我无法使用ClassMetadata。我想访问以下方法:
org.hibernate.metadata.ClassMetadata#getNaturalIdentifierPropertiesorg.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)
entityMetamodel来替换 ClassMetadata?