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