Mat*_*tzz 5 java oracle jpa eclipselink
我有两个实体:
@Entity
class X {
@Id
int id;
}
@Entity
class Y {
@Id
int id;
@ManyToOne
@JoinColumn(name = "x_id")
X x;
}
Run Code Online (Sandbox Code Playgroud)
我想在y表中计算x_id的不同值.我试过了:
select count(distinct Y.x) from Y;
Run Code Online (Sandbox Code Playgroud)
它的工作原理,但在sql我加入x表是不合格的:
select count(distinct x.id) from y, x where y.x_id = x.id;
Run Code Online (Sandbox Code Playgroud)
这种加入对我来说是不必要的,也是非常昂贵 没有原生查询有没有办法避免它?
您可以尝试使用select count(distinct Y.x.id) from Y(Txid 而不是 Yx)。我不确定,但智能 JPA 实现应该发现只有 id 是必需的,并且不会添加连接。
另一种方法是向 Y 添加一个 int 字段,并将只读映射到 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;
}
Run Code Online (Sandbox Code Playgroud)
你的查询很简单select count(distinct Y.xId) from Y
| 归档时间: |
|
| 查看次数: |
1170 次 |
| 最近记录: |