如何使用注释处理Hibernate和Spring中的连接查询?

sre*_*ree 6 java spring annotations hibernate join

我正在使用Spring和Hibernate与MySQL开发应用程序.我是Hibernate的新手并完成了基本任务......

现在我需要在select查询中应用连接以使用注释从多个表中获取数据.我已经搜索过了,但我仍然没有想到......

这是我的数据库表和bean类:

Table 1: 'employee_info' ( id, empid, empname, doj and jobtitle )

Table 2: 'employee_login' ( username, password, status and empid )
Run Code Online (Sandbox Code Playgroud)

我的bean类是:

EmployeeInfoForm.java

@Entity()
@Table(name = "employee_info")
public class EmployeeInfoForm {

@Id
@GeneratedValue
@Column(name = "id", unique = true, nullable = true)
private int id;

@Column(name = "empId")
private int empId;

@Column(name = "empname")
private String empName;

@Column(name = "doj")
private Date empDoj;

@Column(name = "jobtitle")
private String empJobTitle;

public int getEmpId() {
    return empId;
}

public void setEmpId(int empId) {
    this.empId = empId;
}

public void setEmpDoj(Date empDoj) {
    this.empDoj = empDoj;
}

public String getEmpName() {
    return empName;
}

public void setEmpName(String empName) {
    this.empName = empName;
}

public Date getEmpDoj() {
    return empDoj;
}

public void setEmp_Doj(Date empDoj) {
    this.empDoj = empDoj;
}

public String getEmpJobTitle() {
    return empJobTitle;
}

public void setEmpJobTitle(String empJobTitle) {
    this.empJobTitle = empJobTitle;
}


}
Run Code Online (Sandbox Code Playgroud)

EmployeeLoginForm.java

@Entity()
@Table(name = "employee_login")
public class EmployeeLoginForm {

@Id
@Column(name = "username")
private String empUserName;

@Column(name = "password")
private String empPassword;

@Column(name = "status")
private String empStatus;

@Column(name = "empid")
private int empId;

public String getEmpUserName() {
    return empUserName;
}

public int getEmpId() {
    return empId;
}

public void setEmpId(int empId) {
    this.empId = empId;
}

public void setEmpUserName(String empUserName) {
    this.empUserName = empUserName;
}

public String getEmpPassword() {
    return empPassword;
}

public void setEmpPassword(String empPassword) {
    this.empPassword = empPassword;
}

public String getEmpStatus() {
    return empStatus;
}

public void setEmpStatus(String empStatus) {
    this.empStatus = empStatus;
}

}
Run Code Online (Sandbox Code Playgroud)

需求:

我想在两个表上的empid匹配时选择来自employee_info的字段empid,empname,jobtitle和来自employee_login表的字段状态 ...

请帮我完成我的工作......

任何建议和指导表示赞赏......

Stu*_*ion 5

当您谈论使用select语句执行连接时,您正在考虑使用数据库/纯SQL术语.Hibernate的力量(和危险)在于它将它抽象出来并让你以对象的方式思考.你需要的是两个对象之间的关系,然后让Hibernate处理这种关系.

我建议你花些时间阅读这篇文章:

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/associations.html

更好地了解Hibernate如何提供帮助.


Vin*_*nie 5

EmployeeInfoForm和EmployeeLoginForm之间存在关联,我在您的代码中没有看到.也许那里有一个员工班?如果是这种情况,那么您需要添加它.因此,让我们假设每个员工都有很多形式.然后,您将对关系的Employee端进行编码,如下所示:

 public class Employee{

      @OneToMany(cascade = CascadeType.ALL, mappedBy = "employee")
      private Set<EmployeeLoginForm> loginForms = new HashSet<EmployeeLoginForm>();

      ...
 }
Run Code Online (Sandbox Code Playgroud)

而EmployeeLoginForm类中关系的很多方面:

 @ManyToOne
 Employee employee;
Run Code Online (Sandbox Code Playgroud)

这将创建表结构,以便:

 emploee = (id, etc ...)
 employeelogin = (id, employee, ....)
Run Code Online (Sandbox Code Playgroud)

现在,只要您需要Employee的Logins列表,就可以从Employee对象获取它而无需Query.

 Set<EmployeeLoginForm> logins = e.getLoginForms(); //where e is an employee object.
Run Code Online (Sandbox Code Playgroud)

如果你确实想要查询,你可以做

 select o from EmployeeLoginForm o join o.employee
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,这是不必要的.