【发布时间】:2015-11-07 21:32:42
【问题描述】:
我有一些 Hibernate/JPA 注释(老实说仍然不知道区别)允许我创建关联类。这个类将两个相关的项目组合成一个对象。我最初使用的是@JoinTable,但意识到我需要更多带有关联的元数据,因此不得不将代码转换为另一种对象类型。
现在我使用@Id 为我的对象标记ID 列,并使用@NaturalId (mutable = false) 标记String uuid。
我的关联类正在使用 @ManyToOne 并可以很好地创建表,但是当我查看它时,表使用 @Id 字段作为映射列。我希望这个关联类使用@NaturalId uuid 以便于将关系/关联转移到其他系统。
我怎样才能让关系使用正确的标识符?
作为参考,我的数据库和 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 |
------------------------------
Association Class{
ObjA main;
ObjA sub;
@ManyToOne
getMain()
@ManyToOne
getSub()
}
ObjA Class{
Long id;
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@XmlElement
@Column(name = "ID", unique = true, nullable = false)
getId()
String uuid;
@NaturalId (mutable = false)
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
getUUID()
}
【问题讨论】:
-
我知道your previous question。所以我决定澄清一下:你为什么担心链接表?我的意思是数据库级别的实体可以与
@Id链接,然后它们可以用重置键值序列化,然后传输到其他实例,在java-bean级别用所有关系反序列化,然后用@的新值刷新到新数据库中987654332@ 属性...实体的主键会有所不同,但您仍将通过@NaturalId字段获取它们。我错过了什么吗?..
标签: java hibernate jpa naturalid