2011-03-22 52 views
0

我有一個實體CategoryModel。一個屬性的複製下面:休眠查找不在集合中的實體

@OneToMany(cascade = CascadeType.ALL) 
private List<CategoryModel> children; 

我怎麼能執行一個查詢將返回所有CategoryModel實體不在另一個CategoryModel實體的children集合(即根類)?

+0

也許你不能改變模式,但是RootCategoryModel和CategoryModel是否更適合這個標準化?我不知道這是否能讓你的問題更容易解決,但只是好奇而已。 – 2011-03-22 17:31:39

回答

1

最有效的方法是使雙向關係,並在「多」方適用IS NULL

SELECT c FROM CategoryModel c WHERE c.parent IS NULL 

如果你不能改變的關係,你可以做這樣的事情:

SELECT c FROM CategoryModel p RIGHT JOIN p.children c WHERE p IS NULL 
+0

我嘗試使用雙向關係,並且它總是在通過遞歸獲取時崩潰。它將獲取將獲取將獲取父級的子級的父級,等等。我嘗試使用OneToMany方面的mappedBy註解屬性無濟於事。 – Finbarr 2011-03-23 00:51:34

+0

實際上,通過遞歸崩潰的是Json序列化程序,因爲我忘記了在父屬性中包含忽略註釋。謝謝你的幫助! – Finbarr 2011-03-23 01:26:49