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

Setting default values for columns in Hibernate during query mapping

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

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

但我需要的是数据查询,而不是table创建或数据插入。当我使用hibernate session查询出对象,调用方法getAmount()时,会得到return null BigDecimal 对象,我想设置默认值为0 BigDecimal.

映射是由 Hibernate 框架完成的,我该怎么做?

您有多种选择:

  1. 使用@Transient getter 方法。在这种情况下,您可能希望将 amount 字段的 getter 标记为受保护或私有(Hibernate 不会关心),然后公开一个用 @Transient 注释的特殊 public 方法为您执行翻译。
  2. 使用 @PostLoad 注释方法事件回调来转换值而不是 @Convert。您可能想利用 #1 的一部分,在其中添加一个新的 属性 来存储您在 post 加载回调中计算的翻译值,然后使用 getter 注释字段或 @Transient.
  3. 如果可以利用 JPA 2.1,请使用属性转换器。在这种情况下,您将使用 @Convert 注释该字段并指定一个转换器 class 实现,将空值转换为 0

前两个选项的好处是您无需关心如何将值映射回数据库列(例如 0 是否转换为 NULL table 级)。

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