gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 03:26:38 24 4
gpt4 key购买 nike

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

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

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

由于映射是由 Hibernate 框架完成的,我该如何做到这一点?

最佳答案

您有多种选择:

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

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

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

关于java - 在查询映射期间设置 Hibernate 中列的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781197/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com