我有以下两个班级员工和Phonenumber,员工和电话号码之间有关系: 雇员:
@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;
}
电话号码 @实体 @table(名称= “PHONE_NUMBER”) 公共类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才能执行此操作?
答案 0 :(得分:0)
您可以按标准和HQl执行此操作。以下hql将返回您的预期结果。 从PhoneNumber中选择employeeId.id,employeeId.name,其中number = mobile。