我有两个实体:
@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 表,这是不正确的:
select count(distinct x.id) from y, x where y.x_id = x.id;
这个连接对我来说是不必要的,而且成本很高。如果没有原生查询,有什么办法可以避免吗?
最佳答案
您可以尝试使用 select count(distinct Y.x.id) from Y
(T.x.id 而不是 Y.x)。我不确定,但智能 JPA 实现应该发现只有 id 是必需的,不会添加连接。
另一种方法是将一个 int 字段添加到 Y,并只读映射到 x_id 列:
@Entity
class Y {
@Id
int id;
@ManyToOne
@JoinColumn(name = "x_id")
X x;
@Column(name = "x_id", insertable = false, updatable = false, nullable = false)
int xId;
}
而您的查询将只是 select count(distinct Y.xId) from Y
关于java - JPA 计算相关实体而不加入它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32500255/