gpt4 book ai didi

java - 在 Hibernate 中是否可以(以及如何)创建与命名查询的关联?

转载 作者:行者123 更新时间:2023-11-30 23:10:37 24 4
gpt4 key购买 nike

这是关于将计算列干净地映射到 Hibernate 中的实体。我有一个复杂的 SQL 查询,它创建一个包含计算列的 View 。下面是一个简单的版本来说明,其中 avg 函数调用将是一堆坚韧不拔的 SQL ...

CREATE VIEW `Complex` AS
select
`p`.`parentId` AS `complexId`,
avg(`t1`.`someColumn`) AS `complexColumn`
from
(`Parent` `p`
join `Table1` `t1` ON ((`p`.`parentId` = `t1`.`table1Id`)))
group by `p`.`parentId`

有一个 Complex 的实体类,用于返回到由 complexId 连接的 Parent 的关联中:

 @Entity
public class Parent {
...
@OneToOne
@PrimaryKeyJoinColumn(name = "complexId")
private Complex complex;
...

任何返回 Parent 的集合查询,都会很好地返回具有计算列的关联 View 的结果。

这里的问题是,是否有一种方法可以通过在没有 View 的情况下编写复杂查询来创建相同的关联,例如,作为一个命名的 hibernate 查询,并将关联保持在 Parent 到 Complex 中?

这是由于 MySql 中关于参数和子查询的 View 的限制,如果这些都可以在非面向 View 的查询中表示,则可以避免这些限制。

最佳答案

您的 SQL 有多复杂? Hibernate 有 @Formula 这可能是一种可能性:

public class Parent{

@Formula("select avg(xyz) from some_table where parent_id = ?")
private BigDecimal average;


}

Hibernate 还支持过滤器,描述为:

like database views, but they are parameterized inside the application.

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/filters.html

关于java - 在 Hibernate 中是否可以(以及如何)创建与命名查询的关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19910676/

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