假設我想獲得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;
但是我想t o在一個查詢中一次完成。我可以用標準來做到這一點嗎?我沒有花時間學習,但如果可能的話,我會。
等待我正在重讀你的答案,並在最後說「哪一個都至少有一個給定用戶的另一個實體」。我想要的是MyEntity有一個大小爲1或0的列表,其中包含大小爲1的另一個:具有給定用戶的另一個。 – Ced
編輯我的評論*,我想我發現如何做到這一點。所以我會讓你在我確定的時候編輯你的評論,併發布如何和我會接受你的答案。 – Ced
有了原生的JPA是不可能得到一個實體王氏過濾收集 - 您始終獲得所有相關實體在X一對多的映射。如果你想過濾,你需要發出另一個查詢,就像你在你的問題中寫的那樣。您希望使用特定於實現的API,但可能會導致意外的行爲。另請參見[這裏]對話(http://www.eclipse.org/forums/index.php/t/300191/) – OndrejM