JPA映射中的原始类型.如果数据库列可能为NULL怎么办?

Dan*_*nga 8 java orm primitive hibernate jpa

鉴于此类使用JPA映射(使用JPA 1.0和Hibernate):

@Entity
public class Foo {

    private int bar;

    /* ... */
}
Run Code Online (Sandbox Code Playgroud)
  1. 如果我尝试加载BAR列设置为NULL 的记录会发生什么?
  2. bar当相应的列为NULL时,我可以指定如何设置字段吗?

笔记

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

  • 数据库表是临时表:添加NOT NULL约束是不切实际的.错误的数据是预期的,我的代码的重点是在将数据加载到"真实"数据库之前验证,清理和/或拒绝数据.
  • 某些字段的默认值可以接受.例如,一个boolean应该默认的标志false.

Mic*_*l-O 12

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

  • `columnDefinition`仅用于*生成DDL(即生成用于创建和更改表的语句),因此默认值将是基元的默认值.实际上,在使用JPA时,不应使用默认值创建列.如果您的字段是基元,则默认为基本类型的默认值.如果您的字段是对象,则数据库将设置表中定义的默认值,但插入的实体对象中的列对应项不会更新以反映默认值. (2认同)

小智 5

  1. 例外

2.

@Column(name = “bar”, nullable = false, columnDefinition = “bigint(20) default 0?)
private int bar;
Run Code Online (Sandbox Code Playgroud)

它解决了你的问题。