问题标签 [naturalid]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
11466 浏览

hibernate - JPA 相当于 Hibernate 的 @NaturalId

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

是否有 JPA 等效注释,它是其中的一部分javax.persistence

0 投票
1 回答
3107 浏览

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

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

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

我的关联类正在使用@ManyToOne并很好地创建表,但是当我查看它时,表使用该@Id字段作为映射列。我宁愿让这个关联类使用 ,@NaturalId uuid以便将关系/关联转移到其他系统。

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

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

0 投票
1 回答
694 浏览

java - Hibernate 实体中的复合 @NaturalId

对于实体应用程序的生成 ID,使用触发器。因此,为了将生成的值分配给实体,我们使用如下结构:

SelectorGenerator需要@NaturalId用于某些字段,该字段应该具有(逻辑上)唯一值。但是有些表没有任何字段具有所有唯一值。SelectGenerator不支持多个自然 ID。我们如何才能绕过这种情况?

0 投票
1 回答
3577 浏览

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

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

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

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

  • 有没有办法使用这些方法来获取自然 id 映射?
  • 还有另一种获取 ClassMetadata 实例的方法吗?
  • 是否有可能获得一个实例entityMetamodel来替换 ClassMetadata?
0 投票
1 回答
772 浏览

java - 使用自然 ID 进行休眠实体缓存

我有一个实体注释,它由字典中的字段“代码”连接。我想取所有笔记,但有 n+1 个问题。当我获取笔记时,休眠也从表 Dicionary 获取数据,每个笔记有一个额外的查询(如果字典不在一级缓存中)。

我启用了 2 级缓存(我使用的是 ehcache),它仅在我通过 ID 获取字典时才起作用,也许有一种方法如何使用自然 id ?我不想使用查询缓存。也许我应该将字典从二级缓存加载到一级缓存?

我希望这足够清楚。谢谢你。

0 投票
1 回答
191 浏览

hibernate - 如何在 Hibernate 中使用非主键映射 @ManyToOne 关联?

如何@ManyToOne在 Hibernate 中使用非主键映射关联?我可以使用@NaturalId注释,但仍然有错误:

问题类(具有多个主键):

首要的关键

答题类:

看起来该关联仍然是 to@EmbeddedId而不是@Naturalid. 我不知道为什么?