簡體   English   中英

JPA多個查詢而不是一個

[英]JPA multiple queries instead of one

我有兩個實體:

@Entity
@Table(name = "ACCOUNT")
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
public class MyCloudAccount implements Serializable {

    ...

    @OneToMany(mappedBy = "account", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Set<ServerInstance> servers = new HashSet<ServerInstance>();

    ...
}

@Entity
@Table(name = "SERVER_INSTANCE")
public class ServerInstance implements Serializable {

    ...

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "ACCOUNT_ID")
    private MyCloudAccount account;

    ...
}

我通過此代碼獲取所有帳戶:

StringBuilder sql = new StringBuilder();
sql.append("SELECT e FROM ");
sql.append(persistentClass.getName());
sql.append(" e");
return entityManager.createQuery(sql.toString()).getResultList();

這將為帳戶生成一個查詢,為服務器生成N個查詢,而不是使用外部聯接的查詢。 如何強制JPA以最佳方式進行查詢?

我發現使用Java持久性查詢語言更方便

你可以做:

@NamedQueries{
    @NamedQuery(name="myQuery" query="SELECT a FROM MyCloudAccount JOIN FETCH a.servers")
}
public class MyCloudAccount{
    ...
}

那你就可以

TypedQuery<MyCloudAccount> query = em.createNamedQuery("MyCloudAccount.myQuery", MyCloudAccount.class);
List<MyCloudAccount> results = query.getResultList();

編輯您實際上已經在使用JPQL。 解決問題的關鍵是使用JOIN FECTH命令。

暫無
暫無

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

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