在查询映射期间为Hibernate中的列设置默认值

时间:2016-08-05 04:34:58

标签: java hibernate automapper hibernate-mapping

@Column (name="AMOUNT")
private BigDecimal amount;

我在Stackoverflow中看到很多答案,解决方案是使用columnDefinition或在Java构造函数中设置默认值。

但我需要的是数据查询,而不是表创建或数据插入。当我使用hibernate会话查询对象并调用方法getAmount()时,它将返回null BigDecimal Object,我想将默认值设置为0 BigDecimal

我怎么能这样做,因为映射是由Hibernate框架完成的?

1 个答案:

答案 0 :(得分:2)

您有几种选择:

  1. 使用@Transient getter方法。在这种情况下,您可能希望将金额字段的getter标记为protected或private(Hibernate不关心),然后公开一个特殊的公共方法,该方法使用@Transient进行注释,为您执行翻译
  2. 使用@PostLoad带注释的方法事件回调来转换值而不是@Convert。您可能希望利用#1的一部分来添加一个新属性,该属性存储您在post load回调中计算的翻译值,然后使用@Transient注释该字段或getter。
  3. 如果可以使用JPA 2.1,请使用属性转换器。在这种情况下,您将使用@Convert注释该字段,并指定将空值转换为0的转换器类实现。
  4. 前两个选项的好处是您不需要关心如何将值映射回数据库列(例如0转换为NULL表级)。

    从性能角度来看,如果多次访问amount,我可能会亲自使用#2并在翻译一次后缓存该值。