JPA 2.0、Hibernate 4.1.0.Final、および MySQL 5.5.27 を使用しています。行ごとに 2 つのエンティティを返す JPA クエリを作成し、右外部結合を実行したいと考えています。2 つのエンティティは次のとおりです。
@Entity
@Table(name = "user",
uniqueConstraints = { @UniqueConstraint(columnNames = { "USER_NAME" }) }
)
public class User implements Comparable<User>, Serializable
{
...
@Column(name = "first_name")
@NotNull
/* the first name of the User */
private String firstName;
と
@Entity
@Table(name="code_user",
uniqueConstraints = {
@UniqueConstraint(columnNames = { "CODE_ID", "USER_ID" }) }
)
public class CodeUser
{
@Id
@NotNull
@GeneratedValue(generator = "uuid-strategy")
@Column(name = "ID")
private String id;
@ManyToOne
@JoinColumn(name = "CODE_ID", nullable = false, updatable = true)
private Code code;
@ManyToOne
@JoinColumn(name = "USER_ID", nullable = false, updatable = true)
private User user;
ここまでは私の JPA ですが、問題は内部結合が実行されており、行ごとに 1 つのエンティティ (ユーザー オブジェクト) しか返されないことです...
final CriteriaBuilder builder = m_entityManager.getCriteriaBuilder();
final CriteriaQuery<User> criteria = builder.createQuery(User.class);
final Root<User> user = criteria.from(User.class);
final Root<CodeUser> codeUser = criteria.from(CodeUser.class);
final Join<CodeUser, User> joinUser = codeUser.join(CodeUser_.user);
criteria.select(joinUser);
…
return criteria.where(builder.and(preds.toArray(new Predicate[preds.size()])));
すべてのユーザーが返され、一致する CodeUser レコードも返されるように外部結合を実行するにはどうすればよいですか? User エンティティにメンバー フィールドを追加することはできません。