2017-09-24 83 views
0

是否有可能使用命名查詢基於包含特定值的列表查找所有實體。命名查詢基於包含特定值的列表(實例變量)查找所有實體

我有一個叫做用戶

public class User implements Serializable { 

    private static final long serialVersionUID = -82485348776234092345L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    @NotNull 
    @Size(min = 5, max = 50) 
    @Column(name = "email") 
    private String email; 
    @NotNull 
    @Size(min = 5, max = 50) 
    @Column(name = "password") 
    private String password; 
    @Column(name = "creationDate") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date creationDate; 
    @OneToMany(fetch = FetchType.EAGER, mappedBy = "user", cascade = CascadeType.ALL) 
    private List<Phone> phoneNumbers; 


    /* Getters and Setters */ 
} 

我要簡化手機實體保持這個職位乾淨的實體:

public class Phone implements Serializable { 

    private static final long serialVersionUID = -34672347534985L; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    @NotNull 
    @Column(name = "number") 
    private String number; 
    @Column(name = "type") 
    @Enumerated(EnumType.STRING) 
    private EPhoneType phoneType; 
    @Column(name = "creationDate") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date creationDate; 
    @ManyToOne 
    private User user; 


    /* Getters and Setters */ 

} 

現在我需要找到所有有手機用戶號碼,可以說:289647 ....和Phone.type ='MOBILE'

電話類型是一個枚舉。

我不知道如何使用命名查詢實現此目的。對於常規的本地查詢,我可以使用表上的JOIN來完成此操作。有沒有人用NamedQuery做過這樣的事情

回答

1

首先,您可能會將「命名查詢」與「JPQL」查詢混淆。

JPA查詢可以是「本地」和「JPQL」 - 區別在於查詢語言(SQL或類似OQL;第一種是面向記錄的,第二種是面向對象的)。

這兩種類型的查詢都可以是動態的(構建在運行時)或靜態的(又名「命名」,定義爲持久化上下文的靜態部分,就像實體一樣)。後者可以通過創建和存儲準備好的查詢來表示它們進行優化。

以類似於SQL的方式連接類似OQL的語言(HQL,JPQL),但它們不代表連接關係(表),而是代表「對象屬性」。加入屬性時,您不定義任何標準,因爲它們已經是實體定義的一部分。另一方面,連接將爲實體之間的每個關聯創建一行,因此您可能希望使用distinct子句(以避免User重複多次,因爲在phoneNumbers列表中出現匹配的Phone)。

也許你想要的是:

選擇ü從用戶U左加入u.phoneNumbers n其中n.type =:類型和n.number =:數

上面的查詢可以使用兩種作爲命名或未命名的品種,要運行它,您必須提供命名參數typenumber:枚舉和字符串。

+0

這清除了很多東西。非常感謝。我的印象是,在命名查詢中,我不會使用任何連接,只需將對象屬性置入即可獲得我想要的結果。非常感謝。感謝幫助。 –

相關問題