gpt4 book ai didi

JPA/Hibernate 和复合键

转载 作者:行者123 更新时间:2023-12-02 07:40:38 27 4
gpt4 key购买 nike

我遇到过一些SO讨论和其他帖子(例如 hereherehere ),其中描述了在 JPA 中使用复合主键要么是尽可能避免的事情,要么是由于遗留数据库而必需的,或者是因为存在“毛茸茸”的极端情况。由于我们正在从头开始设计一个新数据库,并且没有任何遗留问题需要考虑,因此建议或者更安全地避免使用 JPA 复合主键(Hibernate) strong> 或 EclipseLink?)。

我自己的感觉是,由于 JPA 引擎足够复杂,并且肯定像所有软件一样,并非没有错误,因此最好忍受非规范化的表,而不是忍受运行的恐怖与复合主键相关的错误(基本原理是数字单列主键和外键是 JPA 引擎支持的最简单的用例,因此它应该尽可能没有错误)。

最佳答案

我已经尝试了这两种方法,而且我个人更喜欢避免使用复合主键,原因如下:

  • 您可以创建一个包含 id 字段的父类(super class),这样您就不必在所有实体中处理它。
  • 实体创建变得更加容易
  • JPA 总体上表现更好
  • 引用实体变得更加容易。例如,在一个集合中存储一堆 ID,或者在网页的查询字符串中指定单个 ID,只需使用单个数字即可大大简化。
  • 您可以使用父类(super class)中指定的适用于所有实体的单个 equals 方法。
  • 如果您使用 JSF,您可以制作通用转换器
  • 使用数据库客户端时更容易指定对象

但它也带来了一些不好的部分:

  • 少量非规范化
  • 使用非持久化对象(如果您使用自动生成的 ID,您应该这样做)在某些情况下可能意味着麻烦,因为相等方法等需要 ID 才能正常工作

关于JPA/Hibernate 和复合键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11836440/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com