如何处理加入的Hibernate查询和Spring与注解?(How to handle join q

2019-08-17 11:29发布

我使用Spring开发应用,并与MySQL休眠。 我是新来Hibernate和做基本任务...

现在我需要申请在联接选择查询,从多个表中使用注释获取数据。 我已经寻找它但我仍然没有得到任何想法...

我在这里的数据库表和bean类:

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

Table 2: 'employee_login' ( username, password, status and empid )

而我的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;
}


}

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;
}

}

需求:

我想选择字段EMPID,empname,JOBTITLEemployee_info和现场状态从当EMPID两个表上匹配employee_login表...

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

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

Answer 1:

当你谈论执行与SELECT语句加入您想在数据库/纯SQL条款。 休眠的力量(和危险)是它从你这个抽象出来,而让你觉得在对象方面。 你需要的是两个对象之间的关系,然后让Hibernate处理这种关系。

我建议你花一些时间阅读本:

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

以获得更好的理解休眠如何帮助。



Answer 2:

还有的是,我不是在你的代码看EmployeeInfoForm和EmployeeLoginForm之间的关联。 也许有一个Employee类呢? 如果是这种情况,那么你需要补充的。 因此,让我们假设每个员工有多种形式。 然后你会像这样的代码关系的职工方:

 public class Employee{

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

      ...
 }

而在EmployeeLoginForm类关系的许多方面:

 @ManyToOne
 Employee employee;

这将创建表结构使得:

 emploee = (id, etc ...)
 employeelogin = (id, employee, ....)

现在,任何时候你需要你从Employee对象得到它的员工的登录的列表,而无需查询。

 Set<EmployeeLoginForm> logins = e.getLoginForms(); //where e is an employee object.

如果你是想查询你可以做

 select o from EmployeeLoginForm o join o.employee

但是,这是在这种情况下没有必要。



Answer 3:

你可以使用Hibernate的标准投影如下:

public List extractEmployeeAttributes() {
    log.debug("extractEmployeeAttributes");
    try {
                    Session session = sessionFactory.getCurrentSession();
                    session.beginTransaction();
           Criteria c1 = session.createCriteria(employee_info.class,emp_info);
           Criteria c2 = session.createCriteria(employee_login.class,emp_log);
           c1.setProjection(Projections.projectionList()
                                .add(Projections.property("empid"))
                                .add(Projections.property("empname"))
                                .add(Projections.property("jobtitle"))
                                .add(Projections.property("employee_info "))
                                .add(Restrictions.and(Property.eqName(emp_info.empId,emp_log.empId))
          return c1.list();

    } catch (RuntimeException re) {
        log.error("extractEmployeeAttributes failed", re);
        throw re;

    }

}


文章来源: How to handle join query in Hibernate and Spring with annotations?