命名查询有选择地定义属性



我在实体类中命名

@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 类中的所有属性?我不想在命名查询中显示项目类的所有属性。

我怎样才能做到这一点?

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

试试这个(并相应地更新构造函数)

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

最新更新