hibernate 主键的原语或包装器

2024-03-15

我一直在查看各种 hibernate 教程和示例,对于它们的标识/主键属性,有些使用 Java 原始类型,有些使用包装类型,即;

 private int id; 

vs

 private Integer id;

为什么以及何时使用其中一个作为实体键?


从 Hibernate 的角度来看,它不会改变任何东西,因为 Hibernate 使用相同的 Hibernate 类型来表示它们。

然而,正如 Bytecode Ninja 所指出的,你无法区分原始 int 的默认值0从指定的0虽然a不可能有歧义null (a nullid 总是意味着一个新实体),这就是为什么我更喜欢使用可为空的包装类型。

这是 Hibernate 的建议。来自参考文档:

4.1.2.提供标识符属性(可选) http://docs.jboss.org/hibernate/core/3.3/reference/en/html/persistent-classes.html#persistent-classes-pojo-identifier

Cat 有一个名为 id 的属性。这 属性映射到主键 数据库表的列。这 财产可能被称为 任何东西,它的类型可能是 任何原始类型,任何原始类型 “包装”类型,java.lang.String 或 java.util.Date。如果你的遗产 数据库表有复合键,你 可以使用用户定义的类 这些类型的属性(参见 稍后关于复合标识符的部分 在章节中。)

标识符属性严格 选修的。你可以把它们放在一边 让 Hibernate 跟踪对象 内部标识符。我们不 不过推荐这个。

事实上,有些功能是 仅适用于声明的类 标识符属性:

  • 分离对象的传递性重新附加(级联更新或级联 合并)-参见第 10.11 节, “传递持久性”
  • Session.saveOrUpdate()
  • 会话.merge()

我们推荐你声明 一致命名的标识符 持久类的属性和您使用可空值(即 非原始)类型。

我实际上在我的基类中利用了这一点:

@MappedSuperclass
public class BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    private Long id;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Transient
    public boolean isNew() {
        return (this.id == null);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

hibernate 主键的原语或包装器 的相关文章

  • 如何从二维数组中仅打印单个列?

    我正在编写这个程序 我必须只打印二维数组的一列 而不是两者 for int i 0 i lt sjf length i for int j 0 j lt sjf i length j System out printf 5d 4s sjf
  • Java 访问被拒绝

    C Program Files x86 Java jdk1 6 0 17 bin gt javac VendingMachine java VendingMachine java 27 error while writing Vending
  • 在 Java 中,三个 true 输入的 XOR 返回 true。为什么?

    下面的代码 System out println 1 0 0 true false false System out println 1 0 1 true false true System out println 1 1 0 true t
  • Android - 检测电容式触摸屏上的触摸压力?

    我听说过 MotionEvent e float press e getPressure 但这只会在没有触摸时返回 0 当我的手指触摸屏幕时返回 1 是否可以找到手指在触摸电容屏上施加的压力值 或者我的预感是否正确 即这只适用于电阻屏幕 M
  • 正则表达式查找两个字符之间的内部匹配

    环境 Java 我想匹配两个字符串之间的字符 这是一个例子 foo
  • 高负载应用程序的数据库可扩展性?

    我见过一些应用程序拥有集群 Web 服务器 例如 10 到 20 个服务器 以具有可扩展性 可以在其中分发 在网络服务器之间加载 但我总是看到所有网络服务器都使用单个数据库 现在考虑任何电子商务或铁路 Web 应用程序 其中有数百万用户在任
  • 转换为 JSON 后保留 XMLGregorianCalendar 日期格式 - Jackson Lib

    我有一个对象 它有 2 个 XMLGregorianCalendar 对象 一个用于日期 另一个用于时间 我使用 Jackson 对象映射器将日期转换为 JSON 格式 转换前的日期为2014年2月10日 时间为11 15 00 转换为 J
  • 使用 Windows 锁定屏幕后删除 Kerberos 缓存票证

    无论如何 有没有办法阻止 Kerberos 缓存的票证在 Windows 进入锁定屏幕后被删除 首次登录 Windows 时 klist exe 显示 2 个缓存票证 但是 发生 Windows 锁屏事件后 klist exe 显示 0 个
  • 在 Retrofit 中的 POST 请求中发送空正文

    我的 api 需要一个空的 json 主体 发出帖子请求时 如何在 Retrofit 和 Jackson 中进行设置 我尝试通过null 和空字符串 以及 但无法让它发挥作用 POST my url Call
  • Java setLocation() 事故

    我正处于创建一个程序来操作员工 客户系统的开始阶段 现在我刚刚创建了登录 GUI 但我遇到了一些问题 setLocation 方法 我将其设置为 250 250 但这使我的 GUI 高度变得非常疯狂 如果有人能够解决这个问题 我的代码如下
  • 如何将多个值存储到一个键(java)

    我搜索一个可以存储多个键值对的数据结构 数据基本上是这样的 1 value 1 2 value 2 于是我想到了使用HashMap 遗憾的是 这对我不起作用 因为一个键可能会出现多个值 在上面的例子中 1 value 2 可能是另一个条目
  • 如何从网上获取源代码?

    我正在尝试从 Web 获取 HTML 源代码 我尝试这样做 u new URL url URLConnection con u openConnection con setRequestProperty User Agent Mozilla
  • 使用 JNDI 添加 LDAP 条目

    我正在尝试使用 JNDI 将条目添加到 LDAP 服务器 我可以成功地从 LDAP 服务器读取条目 但是当我尝试添加新条目时出现错误 我检查了各种方法但都失败了 private String getUserAttribs String se
  • 在 Tomcat 中触发内部 ServletRequest

    我正在使用 Quartz 来安排 Web 应用程序的后台任务 其中一些任务只是针对同一 Web 应用程序发出请求 我想避免依赖于任何类型的网络设置 例如 如果从数据中心内发出带有我自己域名的请求 则可能无法正确路由 是否有一个 Java A
  • Spring Hibernate中的@Transient方法调用

    我有一个 Pojo 类 在其中创建一个未与数据库表映射的字段 所以我必须声明字段Declaration和setter和getter方法 Transient 否则会显示错误 Transient private String docHistor
  • 用 Java 编写“漂亮”代码的标准? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • JavaFX颜色选择器的语言

    有没有办法改变语言ColorPicker的文本 例如 自定义颜色 当前颜色 新颜色 色相 饱和度 亮度 不透明度 保存 使用 取消 编辑 以下答案适合那些需要更多内容的人exotic语言 如果您使用其中之一 de es fr it ja k
  • Java 需要一个 FileSet 包/类

    任何人都可以建议 Java 中的 FileSet 包 类吗 我所说的 FileSet 是指文件和目录的集合以及正则表达式支持的包含和排除规则 类似于 Apache Ant 谢谢 Apache 公共 IO文件工具 http commons a
  • Jersey:返回字符串列表

    我尝试以 JSON 和 XML 形式返回 Jersey 中的字符串列表 我以为这会是微不足道的 我的第一次尝试是写这样的东西 GET Produces MediaType APPLICATION JSON MediaType APPLICA
  • 在 Android 版 ORMLite 中加入类会引发 SQL 异常:找不到外部类,反之亦然

    我正在尝试使用 QueryBuilder 为两个不同的类创建一个联接查询 一个Product类和一个Coupon类 引用 Product 属性 storeId public class Coupon DatabaseField column

随机推荐

  • Ghostscript 顽固地拒绝嵌入字体

    我有一个从 pdflatex 创建的文档 嵌入 R pdf 图表 我现在正尝试将其发送到要求嵌入所有字体的打印机 lulu 我认为 没问题 gs dNOPAUSE dBATCH dNOPLATFONTS sDEVICE pdfwrite d
  • 如何:点击时将视图置于前面;设置最大/最小捏合手势比例;将屏幕限制设置为平移手势

    注意 我发现的所有东西都太旧了 或者与我实际需要的东西相差太大 而且我几乎尝试了我发现的所有东西 但没有一个能以正确的方式工作 我创建了 3 个 UIView 我可以拖动它们并缩放它们 现在 我需要 将其中一些放在前面 我想为每个添加一个
  • 使用owin中间件替换响应体

    有没有办法使用 OWIN 中间件覆盖响应内容 我的自定义错误类 public class Error public string error get set public string description get set public
  • RxJs - forkJoin 与空数组

    我目前正在使用forkJoin等待数组Observable s 之前完成pipe 英 和tap ping 我注意到如果数组为空 则不会发出任何信号 我什至不能tap 我该如何解决这种问题 我应该检查数组是否为空吗 myFirstFuncti
  • AspNetCore 2.0 声明始终为空

    我正在努力将 DotNet 4 5 MVC WebAPI 应用程序转换为 AspNetCore 2 0 但在让 Cookie 身份验证再次工作时遇到一些问题 当我设置 cookie 并尝试访问安全方法时 我无法到达那里 当我进入匿名方法并检
  • 空比较

    有一个查询 UPDATE MyTable SET nvarchar1 blahblah WHERE Id 096fe792 7313 416f b3c8 327f46be73b6 AND nvarchar1 lt gt blablah 当
  • 使用 Delphi 检测互联网连接激活

    我使用 3G 无线卡已经有一段时间了 每次连接时 我的防病毒软件都会启动更新 我想知道我可以使用哪些 Win32 API 函数集来获取通知或查询即将出现的 Internet 连接事件 Delphi 已经有一组移植的标头了吗 我参与了一个项目
  • 如何将无边框表单对齐到屏幕边缘?

    当我将窗体的边框样式设置为无时 我无法再将窗口捕捉到屏幕边缘 我怎样才能两者兼得 Aero Snap 需要一个有边框的窗口 没有后门 您可以使用以下代码来模拟捕捉这个帖子 https stackoverflow com a 591734 1
  • ruby/ruby on Rails 内存泄漏检测

    我使用 ruby on Rails 编写了一个小型 Web 应用程序 其主要目的是上传 存储和显示 xml 文件最多可达几 MB 文件的结果 运行大约 2 个月后 我注意到杂种进程使用了 大约 4GB 内存 我做了一些关于调试 ruby 内
  • 单页网站上复杂的活动状态导航

    HTML div class logo ribbon a href top a div
  • 为什么用 p.then(resolve) 比用resolve(p) 更早地解决新的 Promise?

    Code 1 和 Code 2 之间的区别是 Code 1 使用resolve p 和代码 2 使用p then gt resolve 我希望输出的序列是不变的 但它们会生成不同的序列 我不明白为什么 代码 1 resolve p cons
  • javac 类路径顺序与 Oracle 文档相矛盾?

    In 塞拉 贝茨 SCJP https rads stackoverflow com amzn click com 0071591060本书第 797 页 java 和 javac 首先查看包含 Java SE 标准类的目录 然后他们查看类
  • AJAX 按钮提交的 HTML5 表单验证

    我有以下表格 我喜欢新的 HTML5 表单验证 并且更愿意保留它 然而 我不喜欢按下按钮时刷新页面 表单提交 的方式 相反 我更愿意使用按钮触发一些 AJAX 来刷新页面元素 而不刷新整个页面 然而 当我设置type button 发生的情
  • Android - 使用 LocationManager.requestLocationUpdates 时,我需要 WakeLock 吗?

    我的应用程序使用警报定期检查位置BroastcastReceiver启动一个服务 我知道我应该在启动服务之前获取唤醒锁 但我的问题是我什么时候可以释放它 如果我在调用后释放唤醒锁requestLocationUpdates 设备是否可以进入
  • 将一次性代码交换为刷新令牌时出现 Google OAuth redirect_uri_mismatch

    我正在实现 Google OAuth2 服务器一次性代码流程 如下所述 https developers google com identity sign in web server side flow https developers g
  • 如何处理 iOS 中的 Firebase 数据库错误? #AskFirebase

    我需要以不同于所有其他错误的方式处理 权限被拒绝 错误 在 Android 中我已经做到了 Kotlin override fun onCancelled error DatabaseError if error code Database
  • AVAudioPlayer 声音未播放

    在 iOS 8 Xcode 6 中 我有一个包含声音效果的功能 多次更改代码后 它在 iOS 9 中不再起作用 这是我尝试过的 原来的 let bangSoundEffect SKAction playSoundFileNamed Bang
  • Android Studio 2 错误:app:compileDebugJavaWithJack

    这是 Android Studio 2 1 1 的完整错误 我知道这段代码可以编译 因为在其他 PC 上它可以编译 但在 Windows 10 x64 的这台 PC 上却不行 所有其他项目都以类似的结果失败 Error Execution
  • php代码到mysql数据库导出[重复]

    这个问题在这里已经有答案了 可能的重复 最佳实践 在 PHP 中导入 mySQL 文件 分割查询 https stackoverflow com questions 1883079 best practice import mysql fi
  • hibernate 主键的原语或包装器

    我一直在查看各种 hibernate 教程和示例 对于它们的标识 主键属性 有些使用 Java 原始类型 有些使用包装类型 即 private int id vs private Integer id 为什么以及何时使用其中一个作为实体键