gpt4 book ai didi

java - Hibernate 设置的字段可以是最终的吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:18:01 26 4
gpt4 key购买 nike

当我保存 Java 文件时,我的 Eclipse 会自动执行许多代码清理操作,其中包括尽可能将 final 添加到 private 字段。

这会不会与 Hibernate 将实体属性注入(inject)私有(private)字段的能力发生冲突?

@Id
private final Long id = null; // Eclipse made this "final"
// but Hibernate needs to set the id

我应该关闭这个保存操作吗?

更新:我已经测试了该应用程序并使用调试器查看了它,Hibernate 确实重置了“final”字段,因此一切正常。但这能保证有效吗?例如,是否没有依赖于真正最终的字段的 VM 或编译器优化。那些可能会破裂。另一方面,能够通过反射设置 private 字段似乎是一个受支持的场景,所以同样的想法可能也适用于 final 吗?

最佳答案

即使它有效,也不要这样做。

一个final字段可以只写一次,部分java内存模型就是基于这个事实。

我找到了这个博客 http://www.polygenelubricants.com/2010/03/modifying-static-final-fields-through.html这表明可以使用真正的 Hack 通过反射设置最终结果。 (但请不要在任何实际应用中这样做。)

这是对相关问题的回答:Is there any way to declare final fields for Hibernate-managed objects?

在您的情况下,最简单的解决方案是:使字段可变,并且仅提供 setter/getter 而不提供 setter/getter 。

关于java - Hibernate 设置的字段可以是最终的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4342366/

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