我是Java的新手,但我一直在养成使用final的习惯,尽可能宣布不变性,我认为这是一件好事.(考虑f#)
我已经读过JPA不支持final字段.Hibernate,TopLink?我不确定这些,但我现在更喜欢JPA.
这在理论上是否可能 - 让我们通过反思说 - 在创建后修改最终字段?我的猜测是......不...
持久性解决方案当然可以支持带参数的构造函数.至少我认为没有理由会让这件事变得不可能.我猜,映射会有点棘手.这是一种替代解决方案.
建议?
编辑:我不熟悉不可变的确切定义,所以我直观地在这篇文章中使用它.在此声明不变性意味着声明无法更改字段.很抱歉对于这个误会.
小智 6
对象不变性(注意不可变对象之间的区别,并声明一个字段final - 如果所有字段都是final,则对象只是不可变的,因此对象的状态在创建后不能更改)是一个非常敏感的主题.我自己喜欢它们,而hibernate通过@Immutable支持它们.
不知道它在JPA 2中的状态,但回答有关最终字段的问题:您可以使用反射更改其值 - 但在Java EE环境中反射受到严重限制.
为了启发主要问题:如果您的POJO是不可变的,那么持久解决方案将如何重新创建对象?假设你有两个最终的int字段,以及一个初始化它们的构造函数.持久层不能包含有关其顺序或其名称的任何信息(因为在编译期间将删除字段和参数名称).
Koshuke发布了一篇关于此的博客(关于支持不可变bean的JAXB),但现在找不到它.
| 归档时间: |
|
| 查看次数: |
3454 次 |
| 最近记录: |