如何在休眠标准中编写以下查询

时间:2016-02-06 06:35:51

标签: java mysql hibernate hibernate-criteria

Select * from Table A left join Table B on A.id=B.id and A.langCode='IN';

其中'IN'是从用户输入的。

表A和表B具有Mapping For Id,但两者之间没有使用LangCode的映射,因为表B剂量有一个名为langCode的列要映射,我想使用hibernate标准编写以下查询而不映射langcode。< / p>

表:员工: EMP_ID - 主键, 名称 , CONTACT_DETAILS

表:Employee_Lang: EMP_ID-复合主键, LANG_CODE-复合主键, NAME

实际查询:

Select * from Employee Emp left outer join Employee_Lang EmpLang on Emp.EMP_ID=EmpLang.EMP_ID AND EmpLang.LANG_CODE='IN'

我已经只将Emp_Id作为主键映射到hibernate中的两个表中,因此hibernate条件只会对其应用一个连接 而不是LangCode。

注意: - 我无法更改hibernate映射,只能使用hibernate Criteria,根据客户要求,请帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

例如,您有两个模型:

@Entity
class Employee {
  @Id
  private Long id;
  @OneToOne
  private EmployeeLang employeeLang;
  ...
}
@Entity
class EmployeeLang {
  @Id
  private Long id;
  private String langCode;
  @OneToOne
  private Employee employee;
  ...
}

你应该在它们之间有一些映射,然后你可以做下一个标准:

Criteria criteria = session.createCriteria(Employee.class);
criteria.createAlias("employeeLang", "empLang"); // inner join with EmployeeLang
criteria.add(Restrictions.eq("empLang.langCode", "in");

List<Employee> employees = criteria.list();