【发布时间】:2015-12-06 15:28:28
【问题描述】:
我有两个实体:
@Entity
class X {
@Id
int id;
}
@Entity
class Y {
@Id
int id;
@ManyToOne
@JoinColumn(name = "x_id")
X x;
}
我想计算 y 表中 x_id 的不同值。我试过了:
select count(distinct Y.x) from Y;
它可以工作,但在 sql 中我加入了 x 表,这是 uneccesery:
select count(distinct x.id) from y, x where y.x_id = x.id;
这个连接对我来说是不必要的,而且成本很高。没有原生查询有什么办法可以避免吗?
【问题讨论】:
-
请注意,这里的答案可能取决于实现。例如,Hibernate 可能会生成更高效的查询。
-
我害怕这个。我使用eclipselink
-
一个 JPA 解决方案是,如果您不想加入到表 X,请不要将其映射为关系。您可以将“x_id”外键映射为基本,以便在没有连接的查询中使用它。EclipseLink 还具有可以创建的查询键,以将查询中的字段用作基本映射,这样您就可以准确控制何时需要你想要它。至于这个查询,你用的是什么版本?
标签: java oracle jpa eclipselink