我有一个基本的处理数据库的SpringBoot/Hibernate应用程序。我有一个列在一个Oracle表,表示一个布尔值。在数据库级别,它是这样表示的P_IND CHAR(1 BYTE) DEFAULT 'N' NOT NULL
在实体层面,我是这样映射的-
@Column(name = "P_IND")
@Type(type = "yes_no")
private boolean ind;
创建新记录时,默认值需要是'N',这就像预期的那样工作。现在,默认值需要为true
(数据库中的'Y')。我可以这样做
a)private boolean ind = true;
或添加此注释
b)@ColumnDefault("true")
- 是不是a)更有利的,因为你可以创建/持久化实体与真/假值?
- 将b)允许您创建两者(
ind
是一个原始布尔值),如果是这样,是一个更好的注释方式吗?
它们做的是两件不同的事情。
@ColumnDefault
是一个Hibernate ORM特定的注释(不是JPA)。它标识Hibernate在启动时生成模式时将在列定义中使用的默认值。这意味着只有在Hibernate创建列时才会使用。
private boolean ind = true;
使用原始类型意味着在持久化或更新期间,值将始终是true
或false
(我认为在Java中默认是false
)。因此,@ColumnDefault
并不重要(除非您运行自定义插入查询而没有Hibernate ORM)。
如果你改变Boolean
的类型,然后ind
可以为空。这意味着插入时使用的默认值将是创建列时使用的值。如果您使用Hibernate ORM创建了数据库,则它是@ColumnDefault
中的值。
无论如何,你似乎两者都需要。