Java 如何使用hibernate将查询列映射到类?

Java 如何使用hibernate将查询列映射到类?,java,spring,hibernate,spring-mvc,hql,Java,Spring,Hibernate,Spring Mvc,Hql,我试图创建一个从两个表返回不同列的查询,并且希望将查询列映射到用户定义类 我的学生模型: package com.example.demo.models; 导入javax.persistence.*; 导入java.util.List; @实体 @桌子 公立班学生{ 公立学生(){ } 公立学生(字串姓氏、字串姓氏、字串年龄){ this.firstName=firstName; this.lastName=lastName; 这个。年龄=年龄; } @纵队 @身份证 @GeneratedVal

我试图创建一个从两个表返回不同列的查询,并且希望将查询列映射到用户定义类

我的学生模型:

package com.example.demo.models;
导入javax.persistence.*;
导入java.util.List;
@实体
@桌子
公立班学生{
公立学生(){
}
公立学生(字串姓氏、字串姓氏、字串年龄){
this.firstName=firstName;
this.lastName=lastName;
这个。年龄=年龄;
}
@纵队
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
@纵队
私有字符串名;
@纵队
私有字符串lastName;
@纵队
私弦时代;
@ManyToMany(cascade={CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
@JoinTable(name=“学生\课程”,
joinColumns=@JoinColumn(name=“studentID”),
inverseJoinColumns=@JoinColumn(name=“courseID”))
私人名单课程;
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getAge(){
回归年龄;
}
公共无效设置(字符串期限){
这个。年龄=年龄;
}
公开课程名单{
返回课程;
}
公共课程(列出课程){
本课程=课程;
}
}
我的课程模式:

package com.example.demo.models;
导入javax.persistence.*;
导入java.util.List;
@实体
@桌子
公共课{
公共课程(){
}
公共课程(字符串courseName、字符串单位计数){
this.courseName=courseName;
this.unitCount=unitCount;
}
@纵队
@身份证
@GeneratedValue(策略=GenerationType.IDENTITY)
私有int-id;
@列(name=“CourseName”)
私有字符串courseName;
@纵队
私有字符串单位计数;
@ManyToMany(fetch=FetchType.LAZY,cascade={CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH})
@JoinTable(name=“学生\课程”,
joinColumns=@JoinColumn(name=“courseID”),
inverseJoinColumns=@JoinColumn(name=“studentID”))
私人名单学生;
@多通(级联=级联类型.ALL)
@JoinColumn(name=“teacherID”)
私人教师;
公共字符串getCourseName(){
返回courseName;
}
公共void setCourseName(字符串courseName){
this.courseName=courseName;
}
公共字符串getUnitCount(){
返回单位计数;
}
公共void setUnitCount(字符串unitCount){
this.unitCount=unitCount;
}
公众学生名单{
留学生;
}
公立学校学生(名单学生){
这个。学生=学生;
}
公共教师与教师(){
归国教师;
}
公共空白设定者(教师){
教师=教师;
}
}
服务层中的我的查询:

@Transactional
公共列表getStudentInfo(){
Session Session=sf.openSession();
Query hql=session.createQuery(“从Students std join std.courses c中选择std.firstName、std.lastName、c.courseName”);
var data=hql.list();
session.close();
返回数据;
}
我希望将查询列映射到这个简单类:

package com.example.demo.ViewModels;
公共班级学生信息{
私有字符串名;
私有字符串lastName;
私有字符串courseName;
公共字符串getFirstName(){
返回名字;
}
public void setFirstName(字符串firstName){
this.firstName=firstName;
}
公共字符串getLastName(){
返回姓氏;
}
public void setLastName(字符串lastName){
this.lastName=lastName;
}
公共字符串getCourseName(){
返回courseName;
}
公共void setCourseName(字符串courseName){
this.courseName=courseName;
}
}
最后 我的控制器类:

@RequestMapping(value=“/”,method=RequestMethod.GET)
公共模型和视图索引(){
List data=studentRepository.getAll();
返回新模型和视图(“indexView”、“data”、data);
}
注意:我正在这个项目中使用thymeleaf。
请帮帮我。
谢谢。:D


如果您使用
Spring-Data-JPA
,您应该能够使用
@Query
注释在存储库中执行此操作:

@Query(value=“选择新建com.path.to.StudentInfo(std.firstName)”+
“std.lastName,c.courseName)”+
“从学生标准加入标准课程c”
列出getAllStudentInfo();
但要确保在
StudentInfo
中有一个all-args构造函数

如果使用Hibernate,则几乎相同:

entityManager.createQuery(“选择新建com.path.to.StudentInfo(std.firstName,”+
“std.lastName,c.courseName)”+
“从学生标准加入标准课程c”,
学生信息(课堂)

编辑:我担心在使用
join
时它是否应该起作用,但无论如何都要尝试一下。

谢谢Krisz:)。我有个问题。”@查询“服务层中接口方法或类方法的most替换”?因为我有带有'@Repository'注释的接口和带有'@Service'注释的类。您必须在存储库层中添加一个带有
Query
的方法。见:谢谢