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个值:

  • 真的
  • 假的
  • 空的
  • 在处理实体时,null可以产生全新的语义。我通常用它作为“没有可用的数据”。对于此类字段,您的“启用”可能是一个不好的示例。但是假设你有一个数字,它代表一个人的年龄

    private Integer age;
    
    使用null时,可以将其视为:“未知”。在这种情况下,您也可以使用int并定义一个特殊值(-1),但null是更自然的解决方案


    总而言之。如果总是有一个有意义的值(必填字段?)和可选值的包装类,则使用原语。

    谢谢,我将坚持使用java数据类型,以避免对NullSA进行特殊处理,因为我知道内存占用和执行时间都有差异。有关更多信息,请参阅本文:请记住,如果您对
    实体
    中的字段使用基元类型,并读取表中已存在的一行,其中该字段的匹配列为
    NULL
    ,那么当您尝试使用
    实体