我们的应用程序可以正确地与Hibernate 5和PostgreSQL的布尔类型,需要有一个默认值与columnDefinition = "bool default false"
属性的@列注解。现在,我们必须使应用程序与Oracle和PostgreSQL工作,我们必须避免使用此columnDefinition,因为它不是一个有效的值与Oracle。不要更改db中的实际布尔类型,而是使用TrueFalseType之类的类型。
我发现具有类似行为的唯一方法是创建一个自定义转换器来避免空值
@Converter
public class Converter implements AttributeConverter<Boolean, Boolean> {
@Override
public Boolean convertToDatabaseColumn(Boolean aBoolean) {
return Objects.nonNull(aBoolean) && aBoolean.booleanValue();
}
@Override
public Boolean convertToEntityAttribute(Boolean aBoolean) {
return Objects.nonNull(aBoolean) && aBoolean.booleanValue();
}
}
然后使用@Convert(converter = Converter.class)
注解实体属性
我不确定这个解决方案,是否有更好的解决方案
先谢了!
1条答案
按热度按时间3pvhb19x1#
你知道列的默认值只有在你没有在insert语句中列出列的时候才会生效吗?只要你Map了一个列,Hibernate就会在insert语句中列出这个列,所以列的默认值是没有用的。只要给实体字段赋一个非空的默认值就行了。