【问题标题】:How Can I write The Following Query In hibernate Criteria如何在休眠条件中编写以下查询
【发布时间】:2016-05-16 06:10:39
【问题描述】:
Select * from Table A left join Table B on A.id=B.id and A.langCode='IN';

“IN”是用户输入的。

表 A 和表 B 具有 Id 映射,但两者之间没有使用 LangCode 的映射,因为表 B 有一个名为 langCode 的列要映射,我想使用休眠条件编写以下查询而不映射 langcode。

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

表:Employee_Lang: EMP_ID-复合主键, LANG_CODE-复合主键, 姓名

实际查询:

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 上。

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

【问题讨论】:

  • 您能否在字段中添加实体 A 和 B 代码。
  • 您好,我已经添加了更改,您能帮我解决一下吗
  • 我的意思是java类A和B,你能添加它们吗?
  • 其实这只是我想要实现的一瞥,我正在研究的课程与此完全不同,我添加了此参考数据,因为我无法在此处提供实际课程(客户协议) 希望你能理解我

标签: java mysql hibernate hibernate-criteria


【解决方案1】:

例如你有两个模型:

@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();

【讨论】:

    猜你喜欢
    • 2014-06-23
    • 2021-06-14
    • 1970-01-01
    • 2020-04-13
    • 2012-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多