NamedQuery有选择地定义属性

时间:2014-12-16 10:39:30

标签: jpa named-query toplink

我在实体类中将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类中的所有属性?我不想在namedQuery中显示Project类的所有属性。

我怎样才能做到这一点?

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

1 个答案:

答案 0 :(得分: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;
}