我基本上有一个数据库,其中有两个表,其架构如下:
Employee
|id|Age|Sex|
Table
|Table_id|Emp_id|Location|
我的 employee.hbm.xml 文件如下所示:
<property name="id"
type="integer"
column="emp_id" />
<property name="age"
type="integer"
column="age" />
<property name="sex"
type="string"
column="sex" />
我的 table.hbm.xml 文件看起来像:
<property name="table_id"
type="integer"
column="table_id" />
<property name="emp_id"
type="integer"
column="emp_id" />
<property name="location"
type="string"
column="location" />
我有必要的映射类,即getter 和setter。他们看起来像:
public class EmployeeModel {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id", referencedColumnName="emp_id")
private int id;
private int age;
private String sex;
//Getters and setters for all the variables
public class TableModel {
@OneToMany(mappedBy="EmployeeModel")
private int table_id;
private int emp_id;
private String location;
private int table_id;
private int emp_Id;
private String location;
//Getters and setters for all the variables
为了收集返回数据,我创建了一个名为 EmployeeTableModel 的新类,如下所示:
public class EmployeeTableModel{
private int table_id;
private int emp_id;
private String location;
private int table_id;
private int emp_Id;
private String location;
}
正如你所理解的,我基本上需要打个电话,告诉我员工的详细信息和他所在的桌子。它们之间存在一对一的关联。我了解我的代码具有多对一的相关性,请对此进行纠正。目前,我的查询是:
List<EmployeeTableModel> data = sess.createCriteria(EmployeeModel.class)
.setFetchMode("TableModel", FetchMode.JOIN)
.add(Restrictions.eq("emp_id", "ANY INPUT" )).list();
我希望它能给我一个类似的查询:
select e.id,e.age,e.sex,t.table_id,t.emp_id,t.location from employee e, table t;
但是,它反而给了我:
select e.id,e.age,e.sex from employee e;
我在表中添加了一个 Employee 变量,我更正了查询,使用了 HQL,但我仍然无法找出问题所在。有人可以告诉我它出了什么问题吗?或者给出一个替代答案?