hibernate多个查询返回主表中的所有值

时间:2013-09-26 15:56:06

标签: hibernate

我有以下两个班级员工和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才能执行此操作?

1 个答案:

答案 0 :(得分:0)

您可以按标准和HQl执行此操作。以下hql将返回您的预期结果。 从PhoneNumber中选择employeeId.id,employeeId.name,其中number = mobile。