java JPA获取连接实体的最小/最大属性
考虑以下两个实体:
@Entity
public class HostMachine {
@ManyToMany(fetch = FetchType.LAZY, targetEntity = Application.class)
private Set<Application> applications;
// getters and setters
}
@Entity
public class Application {
@Basic
@Enumerated(EnumType.STRING)
private BusinessCriticality businessCriticality;
@ManyToMany(fetch = FetchType.LAZY, targetEntity = HostMachine.class, mappedBy = "applications")
private Set<HostMachine> hosts;
// getters and setters
}
一种典型的ManytoMany
关系现在我希望看到主机上已连接应用程序的最高业务关键性强>
我尝试使用@Transient
属性,并在每个返回主机的查询之后设置它,但是对于集合,我需要对每个元素进行查询,因此这是非常没有性能且代码非常难看的
然后我尝试使用Hibernate的@Formula
:
@Formula("SELECT MIN(a.businessCriticality) FROM Application a")
private BusinessCriticality businessCriticality;
但这给了我一个MySQLSyntaxErrorException
,即使我可以在MySQL客户机中执行查询
# 1 楼答案
您必须将本机SQL查询放入
@Formula
值中。然后,当对此实体/属性进行Hibernate查询时,它将用于创建select查询在您的情况下,应该是这样的(这取决于您使用的命名策略):
如果
a.business_criticality
可以放在max/min
内,那么这一切都会起作用(对于MySQL来说,它是可以的,但它能正确地满足您的需要吗?)