[英]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.