2014-12-16 5 views
0

Я имею namedQuery в классе сущностей, определенных какNamedQuery выборочно определить атрибуты

@NamedQuery(name = "Emp.findAll", 
query = " select new test.entity.Emp(o.empNo, o.salary, o.project) from Emp o ") 

Конструктор

public Emp(String empNo, String salary, Project project) { 
     this.empNo = empNo; 
     this.salary= salary; 
     this.project = project; 
     } 

и генерируется SQL является

SELECT t0.emp_no, t0.salary, t1.project_id, t1.project_name, t1.project_desc 
FROM EMP t0, PROJECTS t1 WHERE (t1.project_id (+) = t0.project_id) 

В namedQuery как я выборочно объявлять ProjectID и projectName вместо всех атрибутов из класса Project? Я не хотел бы отображать все атрибуты класса Project в namedQuery.

Как я могу это достичь?

Update 1

public Emp(String empNo, String salary, Long projectId, String projectName) { 
     Project pr = new Project(); 
     this.empNo = empNo; 
     this.salary= salary; 
     pr.setProjectId = projectId; 
     pr.setProjectName = projectName; 
     } 

ответ

2

Попробуйте (и обновить конструктор соответственно)

@NamedQuery(name = "Emp.findAll", 
query = " select new test.entity.Emp(o.empNo, o.salary, p.projectId, p.projectName) from Emp o inner join o.project p ") 

Конструктор будет что-то вроде этого

public Emp(String empNo, String salary, Long projectId, String projectName) { 
    this.empNo = empNo; 
    this.salary= salary; 
    Project pr = new Project(); 
    pr.setProjectId(projectId); 
    pr.setProjectName(projectName); 

    this.project = pr; 
} 
+0

Проверьте мой обновленный ответ. –

+0

У меня нет 'projectId', определенный в классе Emp, только класс' Project'. – user75ponic

+0

Я модифицировал конструктор как 'this.project.setProjectId (projectId);' Однако я получаю 'Исключение Описание: Исключение было выполнено при выполнении ReportQuery с выражением конструктора: java.lang.reflect.InvocationTargetException Запрос: ReportQuery (test.entity.Emp) ' – user75ponic