Java JPA映射中的基元类型。如果数据库列可能为空,该怎么办?

Java JPA映射中的基元类型。如果数据库列可能为空,该怎么办?,java,hibernate,jpa,orm,primitive,Java,Hibernate,Jpa,Orm,Primitive,给定这个用JPA映射的类(使用JPA1.0和Hibernate): 如果我尝试加载一个BAR列设置为NULL的记录,会发生什么情况 当相应列为空时,我可以指定如何设置栏字段吗 注释 我知道这不是最好的做法。这个问题更多的是出于好奇,是受这种情况的启发: 数据库表是一个暂存表:添加notnull约束是不切实际的。坏数据是意料之中的,我的代码的要点是在将数据加载到“真实”数据库之前验证、清理和/或拒绝数据 对于某些字段,我有可接受的默认值。例如,boolean标志,默认为false 例外情况 二

给定这个用JPA映射的类(使用JPA1.0和Hibernate):

  • 如果我尝试加载一个
    BAR
    列设置为NULL的记录,会发生什么情况
  • 当相应列为空时,我可以指定如何设置
    字段吗
  • 注释

    我知道这不是最好的做法。这个问题更多的是出于好奇,是受这种情况的启发:

    • 数据库表是一个暂存表:添加
      notnull
      约束是不切实际的。坏数据是意料之中的,我的代码的要点是在将数据加载到“真实”数据库之前验证、清理和/或拒绝数据
    • 对于某些字段,我有可接受的默认值。例如,
      boolean
      标志,默认为
      false
  • 例外情况
  • 二,


    它解决了您的问题。

    如果列可能包含空值,我宁愿使用对象,因为Matheus的想法引入了错误的数据<代码>空0

    如果db列可以包含null,那么您真的应该使用包装类来表示该值。但是对于第2点,我需要更改数据库列定义,不是吗?我同意,如果您真的需要null表示,您应该将bar更改为Integer。但是如果你想避免null,你可以设置一个默认值。顺便说一下,我认为基本类型已经有了一个默认值。但是,如果您已经有一个包含空条目的列,那么将bar更改为Integer就是解决方案。您能解释一下这里的假数据是什么意思吗。Matheus将默认值设置为0,nullable=false,因此它永远不会为null。坏数据/假数据是什么意思?
    columnDefinition
    仅用于DDL生成(即生成用于创建和更改表的语句),因此默认值将是原语的默认值。事实上,在使用JPA时,不应该使用默认值创建列。如果字段是基元,则默认为基元类型的默认值。如果字段是对象,则数据库将设置表中定义的默认值,但不会更新插入实体对象中的列对应项以反映默认值。
    @Entity
    public class Foo {
    
        private int bar;
    
        /* ... */
    }
    
    @Column(name = “bar”, nullable = false, columnDefinition = “bigint(20) default 0″)
    private int bar;