簡體   English   中英

JPQL在JPA中具有繼承性

[英]JPQL with inheritence in JPA

我有這些實體:

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public class Item implements Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
    @Column(nullable = false)
    @NotNull
    private String title;
    @Column(nullable = false)
    @NotNull
    private Integer price;
}
@Entity
public class Book extends Item implements Serializable{
    @Column(nullable = false)
    @NotNull
    private String isbn;
    @Column(nullable = false)
    @NotNull
    private String language;
}

我的問題是:

對於Namedquery,我必須將它們放在項目實體或書本實體中?

例如,如果我必須搜索price = 30的書,則此namedquery必須在超類中還是在子類中?

我們知道我們在數據庫Item中將只有一個表,如何使用這種架構來管理jpql。

編輯:如果我有這個問題:搜索價格為30的書,

我可以使用此namedquery進行響應嗎:

@NamedQuery(name=Book.FIND_BY_PRICE,query="select b from Book b where b.price = :bprice")

要么 :

@NamedQuery(name=Book.FIND_BY_PRICE,query="select i from Item i where i.dtype='book'  and i.price = :bprice")

您可以將命名查詢放在所需的任何實體類中。 由於命名查詢是關於尋找書籍的,因此將其放在Book實體中。

關於JPQL查詢,您可以將它們與其他任何JPQL查詢一樣編寫:使用實體名稱和字段,並借助JPA實現對它們的映射和繼承關系的了解,讓JPA實現生成適當的SQL。

不過,我要做的第一件事是將item類重命名為Item,以遵守Java命名約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM