私は2つのエンティティを持っています:
@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();
これにより、外部結合を使用するクエリではなく、アカウントに対して 1 つのクエリが生成され、サーバーに対して N 個のクエリが生成されます。JPAに最適な方法でクエリを作成させる方法は?