当前位置: 首页 > 面试题库 >

如何使用JPA和Hibernate映射计算的属性

陶博耘
2023-03-14
问题内容

我的Java Bean具有childCount属性。此属性 未映射到数据库列 。取而代之的是,它应该
由数据库通过COUNT()对Java bean及其子级的联接进行操作 函数计算
。如果可以按需/“延迟”计算此属性,那就更好了,但这不是强制性的。

在最坏的情况下,我可以使用HQL或Criteria API设置此bean的属性,但我不希望这样做。

Hibernate @Formula批注可能会有所帮助,但我几乎找不到任何文档。

任何帮助,不胜感激。谢谢。


问题答案:

JPA不提供对派生属性的任何支持,因此您必须使用提供程序特定的扩展。如您所述,@Formula使用Hibernate时非常适合此操作。您可以使用一个SQL片段:

@Formula("PRICE*1.155")
private float finalPrice;

甚至是对其他表的复杂查询:

@Formula("(select min(o.creation_date) from Orders o where o.customer_id = id)")
private Date firstOrderDate;

idid当前实体的。

以下博客文章值得一读:Hibernate Derived Properties-Performance and
Portability

没有更多详细信息,我无法给出更准确的答案,但是以上链接应该会有所帮助。

也可以看看:

  • 第5.1.22节。列和公式元素(Hibernate Core文档)
  • 第2.4.3.1节。公式(hibernate注释文档)


 类似资料:
  • 问题内容: 我正在尝试将Postgres自定义类型(名为transmission_result)映射到Hibernate / JPA POJO。postgres自定义类型或多或少是字符串值的枚举类型。 我创建了一个名为PGEnumUserType的自定义EnumUserType以及一个表示postgres枚举值的枚举类。当我对一个真实的数据库运行它时,我收到以下错误:’ERROR:列“状态”的类型

  • 问题内容: 在此代码中,如何为组合键生成Java类(如何在休眠状态下组合键): 问题答案: 要映射组合键,你可以使用 或在注解。我知道这个问题不仅仅涉及,但规范定义的规则也适用。因此,它们是: 2.1.4主键和实体身份 … 组合主键必须对应于单个持久性字段或属性,或者对应于如下所述的一组此类字段或属性。必须定义一个主键类来表示一个复合主键。当数据库密钥由几列组成时,从传统数据库进行映射时,通常会出

  • 问题内容: 我将MySQL列声明为 JSON 类型,并且在使用Jpa / Hibernate映射时遇到问题。我在后端使用Spring Boot。 这是我的代码的一小部分: 该程序返回一个错误,并告诉我无法映射该列。 在mysql表中,该列定义为: json_value JSON NOT NULL; 问题答案: 我更喜欢这样: 创建从Map到String的转换器(属性转换器),反之亦然。 使用Map

  • 我有两个共享一个公共键的表。我想要的是,当我加载第一个表的类时,我还会得到对应于第二个表的类的列表,它们在第二个表中共享键。 更具体地说:tableA有一个id(id1),它存在于tableB的多个条目中。但是,tableB使用复合键并使用id1和id2作为键。 我想实现的是,当加载表A的POJO时,我还会得到表B的所有条目,其中表A中的id1等于表B中的id1。

  • 我不是JPA/Hibernate方面的专家,我真的不知道我试图实现的是不可能实现的还是我做错了,既然我预计是后者,这里就什么也不做了。 我有一个map ,我正试图将其持久化到一个表中,并遵循了这里描述的示例:使用JPA存储map 但随后我得到一个HibernateException:列值的STATE_MAP中的列类型错误。找到:bigint,应为:char(255) 当我将bigint更改为cha

  • 问题内容: 我的问题围绕着我想用JPA映射的以下结构: 我的POJO非常简单(没有复合类型等,只有一些原语)。 如何在链接的问题中实施建议?我该如何仅用部分进行注释(当我仅对字段进行注释时,会发生类转换错误,因为HashMap无法转换为Blob,这是问题的根源- 我不能仅对值部分进行注释地图)? 我不确定是否需要使包装类型实现实现可包装List的Serializable,还是仅使用ArrayLis