2013-03-11 70 views
5

我正在開發使用Spring和Hibernate與MySQL的應用程序。我是休眠新手,做了基本任務...如何在Hibernate和Spring中使用註釋處理連接查詢?

現在我需要在選擇查詢中應用連接以使用註釋從多個表中獲取數據。我已經尋找它但我仍然沒有得到任何想法...

這裏我的數據庫表和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和現場狀態 employee_login表時EMPID兩個表上匹配。 ..

請幫我完成我的工作...

任何建議和指導讚賞...

+0

你嘗試過什麼? Hibernate可以幫助你解決這類問題。 [This](http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/queryhql.html)對你來說是一個很好的起點。 – Magnilex 2013-03-11 13:16:31

回答

4

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 

但是,在這種情況下沒有必要。

2

你可以使用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; 

    } 

} 
+1

這是很好的解釋,謝謝。但我不知道emp_into是如何聲明的。 – JegsVala 2015-11-05 07:06:14

相關問題