|
|
1
13
不可变对象是指没有修改其状态(即其字段)的方法的对象。字段不必是最终字段。因此,您可以删除所有的mutator,并将Hibernate配置为使用字段access而不是accessor,或者您可以将no-arg构造函数和mutator标记为不推荐使用。这有点变通,但总比什么都没有好。 |
|
|
2
13
实际上,在JDK1.5+中,hibernate可以(通过反射)处理最终字段的更改。创建一个受保护的默认构造函数(),将字段设置为某些默认值/null等。。。Hibernate可以并且将在实例化对象时覆盖这些值。 这一切都是由于对Java1.5内存模型的更改而实现的,这些更改是为了启用序列化/反序列化而进行的(允许final不是final)。
} |
|
|
3
8
这听起来似乎不是Hibernate的用例,因为它执行的许多操作都涉及可变状态:
也就是说,如果您担心不变性,您可以选择在对象周围提供包装,并使用复制构造函数:
现在我想起来了,hibernate会话通常是线程绑定的,这至少使最终的字段安全发布的一个好处无效。 你在寻找最终领域的其他好处吗? |
|
|
4
4
这个问题也困扰了我很长时间。我最近尝试的一个想法是,为模型类定义只读接口,让DAO和任何工厂在对象上返回这些接口。这意味着,即使实现是可变的,但一旦离开DAO/factory对象,就不能再对其进行调整。 像这样:
|
|
|
5
2
您可以通过使用构建器模式来实现所需的结果。我读了一本书 posting 不久前,在Hibernate论坛上讨论了这个想法(尽管我自己从未实现过…) |
|
|
6
0
用@Access(AccessType.FIELD)注释类,然后可以将字段设置为最终字段。这样地:
|
|
|
Gero Mendy · 如何为一个类分配兵变的结果。查询 2 年前 |
|
Hamvy B · 替换不推荐的hibernate方法 2 年前 |
|
Martin Pfeffer · Spring Boot JPA 2 年前 |
|
|
denstran · 休眠未生成正确的id 2 年前 |
|
|
Frank · 忽略/跳过Hibernate架构验证中的特定字段 2 年前 |