加入三个表 - Spring数据

时间:2018-04-23 10:04:36

标签: hibernate join spring-data hql

我有三张表:studentstudent_infostudent_hobbiesstudent_info有两列,即stu_idstu_hobstu_id已映射到学生ID,stu_hob已映射到student_hobbies hob_id

我们为student和student_hobbies提供了相应的java类。 student_info没有java类。

我在spring数据中写了一个连接来检索学生的爱好细节。

@Query("select s from student s, student_info sinfo, student_hobbies lp  where s.id = sinfo.stu_id and sinfo.stu_hob = hob_id).

我收到以下错误:

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: student_info is not mapped

那是因为没有名为student_inf的java类。是否必须为student_info创建java类,或者是否有其他方式来获得旅行者的爱好。

 @Entity
    public class Student extends Profile {

        @GeneratedValue(strategy = GenerationType.AUTO)
        private long id;
        private String firstName;
        private String lastName;    
    }

    @Entity
    public class StudentHobbies {

        @GeneratedValue(strategy = GenerationType.AUTO)
        private long hob_id;
        private String bookname;
        private String bookdesc
    }


@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Profile extends AbstractStudent {

    @JoinTable(name = "student_info", joinColumns = @JoinColumn(name = "stu_id", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "stu_hob", referencedColumnName = "hob_id"))
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
    private List<StudentHobbies> studentHobbies;

}

1 个答案:

答案 0 :(得分:0)

  

那是因为没有名为student_inf的java类。是否必须为student_info创建java类,或者是否有其他方法可以让旅行者爱好。

只有拥有映射数据库中现有表的Java类时,Hql / Jpql才有效。在您的情况下,您可以使用StudentInfo类映射表student_info如果没有它们,则无法编写HQL查询。

如果由于某种原因无法创建此类,唯一的方法是放弃HQL并使用本机SQL。