将enabled变量声明为布尔值或布尔值是否有区别?从内存占用的角度来看,这是更可取的.
@Entity
class User {
@Column
Boolean enabled;
}
Run Code Online (Sandbox Code Playgroud)
whi*_*rra 24
我通常建议使用原始类型,只是为了摆脱所有地方的空检查.但这实际上取决于你想说什么.您的布尔值现在可以包含3个值:
在处理实体时,null可以创建一个全新的语义.我通常将其用作"无数据可用".你的"启用"可能是这种领域的一个不好的例子.但是,让我们说你有一个数字来保持一个人的年龄.
private Integer age;
Run Code Online (Sandbox Code Playgroud)
使用null时,可以将其视为:"未知".你也可以使用int并为这种情况定义一个特殊值(-1),但null是更自然的解决方案.
所以,总结一下.如果总是有一个有意义的值(必填字段?)和可选值的包装类,请使用原语.
Kal*_*see 14
它们都映射到相同的列类型.从记忆的角度来看,原语可能会稍微轻一些,但差异几乎可以肯定是微不足道的.我认为一个原语会使它不可为空,但你也可以使用注释来做到这一点.
Kaleb的权利 - 如果任何查询为"enabled"返回空值(在这种情况下),那么你必须使用对象而不是原语.
这来自Hibernate FAQ:
当传递给setter方法的对象类型错误时,通常会发生PropertyAccessException.检查您的类型映射是否存在违规财产.(要确切地查看哪个属性是问题,您可能需要禁用CGLIB反射优化器.)但是,此问题的最常见原因是Hibernate尝试将null分配给基本类型的属性.
如果您的对象具有映射到可空数据库列的基本类型属性,那么您将需要使用Hibernate自定义类型为空列值的大小写分配合理的默认(基元)值.更好的解决方案通常是为Java属性使用包装类型.
https://www.hibernate.org/116.html
| 归档时间: |
|
| 查看次数: |
13504 次 |
| 最近记录: |