是否在JPA实体上保留随机UUID作为对象ID?

用户935265

我喜欢对我所有的JPA域实体使用BaseDomain类。在基类中,我有一个对象ID(存储为字符串),是从UUID.random()生成的。对象ID是在创建对象时分配的。实体类还有一个主键,在持久化时由数据库分配。

到目前为止,我一直坚持基于字符串的对象ID。这会在每个表中添加一个额外的列,但这不会打扰我。

我想知道-是否有任何理由要保留对象ID(生成的UUID)?还是应该将随机UUID留在Java空间中?

我总是将域类hashCode()和equals()方法基于UUID而不是主键。这很好,因为在JVM和数据库中,UUID对于给定实体在整个生命周期中都保持不变。

如果我停止保留UUID,hashCode()和equals()方法将是什么样?就像两层比较一样,如果主键不为null,则首先使用主键,如果主键为null,则使用对象id。

被告

正确实施equalshashCode对于实体而言确实是一个大问题。

如果您拥有“自然”主键(例如某人的社会保险号),则不必保留额外的业务键值。它可以是单个值或值的组合-例如名称,姓氏,生日和地址的组合。如果您具有这样的自然PK,请使用它。如果您没有它,使用UUID是创建一个的好方法。

如果将UUID用于equalshashCode,则还应将其持久化,因此同一记录的两个实例被认为是相等的。

您的equalshashCode应该基于此业务密钥,而不是数据库提供的ID。如果使用数据库提供的ID,则将所有新实体视为相等。这可能会导致意外的行为,尤其是在使用Collections时。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Hibernate / JPA 2 / PostgreSQL-实体UUID作为主键

来自分类Dev

JPA性能:实体还是实体ID作为查询参数?

来自分类Dev

是否绕过托管实体或不在JPA上

来自分类Dev

无法在Glassfish上使用EclipseLink保留任何JPA实体

来自分类Dev

ID的JPA实体问题

来自分类Dev

如何将I18n作为JPA或Hibernate实体的JSON对象实现?

来自分类Dev

使用给定的字段对象ID而不是对象本身存储JPA实体

来自分类Dev

postgres的UUID编号是否均质随机?

来自分类Dev

无法为我的实体生成UUID ID

来自分类Dev

使用jpa在对象中保留对象

来自分类Dev

JPA 2.0-在Parent上自动持久保留子实体,从而产生org.hibernate.id.IdentifierGenerationException

来自分类Dev

使用值对象作为实体ID时自定义Jackson序列化

来自分类Dev

根据RP,ADFS作为SAML2.0 SP是否可以具有多个实体ID?

来自分类Dev

如何使用uuid作为项目ID?

来自分类Dev

JPA使用存储库findBy与实体对象

来自分类Dev

从 JPA 实体创建 Gson 对象 throwingStackOverflowError 异常

来自分类Dev

iOS:生成随机对象ID

来自分类Dev

使用分片计数器值作为实体ID来保持GAE Long ID短是否好

来自分类Dev

实体框架-使用外键删除对象,保留父对象

来自分类Dev

JPA Hibernate-如何(REST API)使用外键作为ID的POST对象?

来自分类Dev

如何使用JPA保留两个实体

来自分类Dev

JPA 实体不保留在我的额外字段中

来自分类Dev

是否可以在实体框架中急于将外键加载到新对象上?

来自分类Dev

猫鼬是否实际上验证对象ID的存在?

来自分类Dev

JPA实体ID-long或Long

来自分类Dev

JPA实体扩展类包含@Id

来自分类Dev

合并后获取实体JPA ID?

来自分类Dev

JPA实体扩展类包含@Id

来自分类Dev

Java Jpa查询搜索与ID相关的实体

Related 相关文章

热门标签

归档