【发布时间】:2015-12-17 12:15:47
【问题描述】:
假设我想获取 ID 小于 10 的 MyEntity 的所有行。该实体包含 Another 实体的列表。我希望这个列表只能由listAnother 的一个子集获取。该子集仅包含 Another,其中包含的 user 是特定的。
在 SQL 中基本上是这样的:
SELECT * FROM myentity m
LEFT JOIN another a
ON m.idTable=a.my_entity
AND a.user = "test1"
WHERE m.idTable < 10;
但是我没能把这个查询翻译成 jpql。
我的实体是这样的:
@Entity
public class MyEntity implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idTable;
@OneToMany(mappedBy = "myEntity")
private List<Another> listAnother;
}
@Entity
public class Another implements Serializable {
@Id
private int idAnother;
// bi-directional many-to-one association to Thethread
@ManyToOne(fetch = FetchType.LAZY)
private MyEntity myEntity;
@ManyToOne(fetch = FetchType.LAZY)
private User user;
}
@Entity
public class User implements Serializable {
@Id
private String username;
}
在 jpa 中我可以这样做:
SELECT m FROM MyEntity where m.idTable < 10;
然后对于我从这个列表中得到的每个实体调用这个:
SELECT a FROM Another Where a.user.username=:'test' AND a.myEntity=:entity;
但是,我想在一个查询中一次完成所有操作。我可以用标准来做到这一点吗?我没有花时间学习它,但如果可能的话,我会的。
【问题讨论】: