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,根据客户要求,请帮我解决这个问题。
答案 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();