Jpa 实体成员应该是基本数据类型还是java数据类型?
将启用的变量声明为布尔或布尔有区别吗?从内存占用的角度来看,这更可取Jpa 实体成员应该是基本数据类型还是java数据类型?,jpa,Jpa,将启用的变量声明为布尔或布尔有区别吗?从内存占用的角度来看,这更可取 @Entity class User { @Column Boolean enabled; } 它们都将映射到同一列类型 从记忆的角度来看,一个原语可能会轻一点,但差别几乎可以肯定是可以忽略不计的 我认为原语会使其不可为null,但您也可以通过注释来实现这一点。Kaleb的权利-如果任何查询返回“enabled”(在本例中)的null值,那么您必须使用对象而不是原语 这来自Hibernate常见问题解答
@Entity
class User {
@Column
Boolean enabled;
}
它们都将映射到同一列类型 从记忆的角度来看,一个原语可能会轻一点,但差别几乎可以肯定是可以忽略不计的
我认为原语会使其不可为null,但您也可以通过注释来实现这一点。Kaleb的权利-如果任何查询返回“enabled”(在本例中)的null值,那么您必须使用对象而不是原语 这来自Hibernate常见问题解答: 当传递给setter方法的对象类型错误时,通常会发生PropertyAccessException。检查您的类型映射以查找有问题的属性。(要确切了解问题出在哪个属性上,可能需要禁用CGLIB反射优化器。)但是,此问题最常见的原因是Hibernate试图将null分配给基元类型的属性 如果对象具有映射到可空数据库列的基元类型属性,则需要使用Hibernate自定义类型为空列值的情况指定合理的默认(基元)值。更好的解决方案通常是为Java属性使用包装器类型
我通常建议使用原语类型,只是为了消除各地的空检查。但这取决于你想说什么。您的布尔值现在可以容纳3个值:
private Integer age;
使用null时,可以将其视为:“未知”。在这种情况下,您也可以使用int并定义一个特殊值(-1),但null是更自然的解决方案
总而言之。如果总是有一个有意义的值(必填字段?)和可选值的包装类,则使用原语。谢谢,我将坚持使用java数据类型,以避免对NullSA进行特殊处理,因为我知道内存占用和执行时间都有差异。有关更多信息,请参阅本文:请记住,如果您对
实体
中的字段使用基元类型,并读取表中已存在的一行,其中该字段的匹配列为NULL
,那么当您尝试使用实体
。