@Column (name="AMOUNT")
private BigDecimal amount;
我在Stackoverflow中看到很多答案,解决方案是使用columnDefinition
或在Java构造函数中设置默认值。
但我需要的是数据查询,而不是表创建或数据插入。当我使用hibernate会话查询对象并调用方法getAmount()
时,它将返回null BigDecimal
Object,我想将默认值设置为0 BigDecimal
。
我怎么能这样做,因为映射是由Hibernate框架完成的?
答案 0 :(得分:2)
您有几种选择:
@Transient
getter方法。在这种情况下,您可能希望将金额字段的getter标记为protected或private(Hibernate不关心),然后公开一个特殊的公共方法,该方法使用@Transient
进行注释,为您执行翻译@PostLoad
带注释的方法事件回调来转换值而不是@Convert
。您可能希望利用#1的一部分来添加一个新属性,该属性存储您在post load回调中计算的翻译值,然后使用@Transient
注释该字段或getter。@Convert
注释该字段,并指定将空值转换为0
的转换器类实现。 前两个选项的好处是您不需要关心如何将值映射回数据库列(例如0
转换为NULL
表级)。
从性能角度来看,如果多次访问amount
,我可能会亲自使用#2并在翻译一次后缓存该值。