2017-06-14 37 views
0

我想讓所有聽衆有一個名爲「創建」的動作。在JPA中,我如何找到具有屬性值的所有類型以及具有屬性值的ManyTomany相關實體?

我有以下的實體(簡化了這個問題):

@Entity 
public class Listener 
{ 
    ...elided... 

    @ManyToMany(targetEntity = Action.class, fetch = FetchType.EAGER) 
    @JoinTable(
     name = "ListenerActions", 
     joinColumns = @JoinColumn(name = "listenerId", referencedColumnName = "id"), 
     inverseJoinColumns = @JoinColumn(name = "actionId", referencedColumnName = "id") 
    ) 
    List<Action> actions; 
} 

@Entity 
public class Action 
{ 
    ...elided... 

    private String name; 
} 

如何操作列表上過濾器?我只需要聽衆的「操作」中的一個操作具有「創建」的名稱。

+1

@CássioMazzochiMolin我不需要做一個連接?我曾看到:'SELECT listener FROM Listener listener JOIN listener.actions action WHERE action.name =:name' –

回答

1

JPA 2查詢中的路徑表達式可以導航到集合值字段,包括跨一對多或多對多關係,但這必須是路徑中的最後一步; JPA不允許你編寫一個從那裏進一步導航的路徑表達式。因此,要執行您想要執行的那種過濾,您需要執行一個連接或創建一個子查詢。在JPA 2.0規範提供前的這個例子:

SELECT DISTINCT o 
FROM Order o JOIN o.lineItems l 
WHERE l.product.productType = 'office_supplies' 

,裏面有你想要的形式。

將它適配到您的模式是作爲練習。

相關問題