0

次の 2 つのクラス Employee と Phonenumber があり、employee と phonenumber の間に onetomany の関係があります: Employee:

@Entity
@Table(name="employee")
public class Employee
@Id
@GeneratedValue
private Integer id;

@OneToMany(fetch = FetchType.LAZY, mappedBy="employee_id")
@JoinColumn(name = "ID")
private Set<PhoneNumber> phonenumbers = new HashSet<PhoneNumber>(0);

public Set<PhoneNumber> getPhonenumbers() {
return phonenumbers; 
}

public void setPhoneNumbers(Set<PhoneNumber> phonenumbers) {
this.phonenumbers = phonenumbers; 
}

電話番号 @Entity @Table(name="phone_number") public class PhoneNumber {

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id")
private Employee employeeid;

public Employee getEmployeeid() {
return this.employeeid;
}

public void setEmployeeid(Employee employeeid) {
this.employeeid = employeeid;
}

1) employee
columns:
id
name

2) phone_number
columns:
employee_id(FK)
phone_number_type
phone_number

従業員が持っている可能性のある電話番号を検索してすべてのデータを返すことができるクエリを実行したいと考えています。基本的に、電話番号を検索すると、従業員とその従業員のすべての電話番号を取得したいと考えています。何らかの理由で 2 人の従業員が電話を共有している場合、両方の従業員のすべての情報を返したいと考えています。次のサンプル クエリを使用しましたが、従業員が持っているすべての電話番号が返されるわけではありません。

String key = new String("phone_number_type");
String value = new String("phone_number");

Criteria criteria = getCurrentSession().createCriteria(Employee.class)
                    .add(Restrictions.eq(key, search.getPhonenNumbertype().toString()))
                    .add(Restrictions.eq(value, search.getPhoneNumber()));

return (List<Employee>) criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();

これを行うには、カスタム HQL を作成する必要がありますか?

4

1 に答える 1

0

HQlだけでなく、基準によっても実行できます。次の hql は、期待される結果を返します。number=mobile の PhoneNumber から employeeId.id,employeeId.name を選択します。

于 2013-09-26T17:31:39.560 に答える