2014-10-24 3 views
0

У меня есть две таблицы Employee и Департамент, как показано ниже:Как получить столбцы из двух таблиц с использованием присоединиться спячки

import java.sql.Date; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.JoinColumn; 
import javax.persistence.ManyToOne; 
import javax.persistence.Table; 


@Entity 
@Table(name="EMPLOYEE") 
public class Employee { 

@Id 
@GeneratedValue 
@Column(name="employee_id") 
private Long employeeId; 

@Column(name="firstname") 
private String firstname; 

@Column(name="lastname") 
private String lastname; 

@Column(name="birth_date") 
private Date birthDate; 

@Column(name="cell_phone") 
private String cellphone; 

@ManyToOne 
@JoinColumn(name="department_id") 
private Department department; 

public Employee() { 

} 

public Employee(String firstname, String lastname, String phone) { 
    this.firstname = firstname; 
    this.lastname = lastname; 
    this.birthDate = new Date(System.currentTimeMillis()); 
    this.cellphone = phone; 
} 

// Getter and Setter methods 
} 

и

import java.util.Set; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.OneToMany; 
import javax.persistence.Table; 

@Entity 
@Table(name="DEPARTMENT") 
    public class Department { 

@Id 
@GeneratedValue 
@Column(name="DEPARTMENT_ID") 
private Long departmentId; 

@Column(name="DEPT_NAME") 
private String departmentName; 

@OneToMany(mappedBy="department") 
private Set<Employee> employees; 

// Getter and Setter methods 
} 

Таблицы выглядеть примерно так:

enter image description here

Теперь я хочу получить Employee с фамилией Mayers и Depar как продажа.

Так я думал, что делать присоединиться и ниже запрос HQL я писал:

String hql=" select e.employeeId, e.firstName from Employee E join Department D on E.department.departmentId = D.departmentId where e.lastName= :param1 and d.departmentName= :param2" 

     query.setParameterList("parm1", "Mayers"); 
     query.setParameterList("parm2", "sales")); 

Я получаю исключение, говорящее путь ожидаемый для соединения. Я попытался дать полное имя com.myexample.Department Затем я получил узел точки без левой стороны. Можете ли вы, ребята, указать мне в правильном направлении.

+1

HQL! = SQL. http://docs.jboss.org/hibernate/core/4.3/manual/en-US/html/ch16.html#queryhql-joins –

ответ

2

Попробуйте

select e.employeeId, e.firstName from Employee e join e.department d where e.lastName= :param1 and d.departmentName= :param2 
+0

выберите e.employeeId, e.firstName из Employee e, где e.lastName =: param1 и e.department.departmentName =: param2 ... будет ли это работать? – javaMan

+0

@ javaMan Да, это будет, поскольку это отношение '@ ManyToOne'. Синтаксис соединения необходим для отношений '@ OneToMany' (хотя, если я правильно помню (и теперь я не могу найти повторение), я думаю, что он также будет работать без соединения в версиях спящего режима <4.x, как побочный эффект ошибки в спящем режиме) –

Смежные вопросы