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