java - Hibernate 对带有额外列的多对多关系的查询

标签 java hibernate

我是 Hibernate 的新手,由于需要额外的列,我正在尝试弄清楚如何查询映射为实体的多对多关系。

特别是,按照我在 codejava.net ( http://www.codejava.net/frameworks/hibernate/hibernate-many-to-many-association-with-extra-columns-in-join-table-example ) 找到的示例,我映射了如下关系:

学生.java

@Entity
public class Student implements Serializable {

    @Id
    @Column
    private String email;

    @Column(nullable = false)
    private String password;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String surname;

    // Constructor, getters, setters, hashcode, equals
 }

类(class).java

@Entity
@Table( 
    uniqueConstraints = @UniqueConstraint(
                            columnNames {"name","year"})
)
public class Course implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column
    private long id;

    @Column
    private String name;

    @Column
    private String year;

    @OneToMany(mappedBy = "course")
    private Set<Student_Course> students = new LinkedHashSet<>();

    // Constructor, getters, setters, hashcode, equals
}

Student_Course.java

@Entity
public class Student_Course implements Serializable {

    @Id
    @GeneratedValue (strategy = GenerationType.IDENTITY)
    @Column
    private long id; 

    @ManyToOne
    @JoinColumn(name = "student_email")
    private Student student;

    @ManyToOne
    @JoinColumn(name = "course_id")
    private Course course;

    @Column(nullable = false,
            columnDefinition = "int default 0")
    private int score;

    // Constructor, getters, setters, hashcode, equals
}

现在我想要实现的是通过 hql 查询找出就读给定类(class)的学生的姓名(我知道类(class)的名称和年份)。 我知道这可能很简单,但我无法在 HQL 中生成有效的查询。

提前谢谢您。

最佳答案

我相信这个查询可以做你想做的事:

SELECT sc.student.name, sc.student.surname
FROM Course c JOIN c.students sc 
WHERE c.name = :name AND c.year = :year

关于java - Hibernate 对带有额外列的多对多关系的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39086188/

相关文章:

java - 如何以编程方式将 "@Cascade"添加到 POJO 字段(Spring mvc + Hibernate)

Java ETL流程

java - Elasticsearch 查询在同一查询中使用 And & Or - Bool 查询?

java - 在windows中集成Apache Storm与zookeeper

java - 在 Spring MVC webapp 中添加系统属性

java - 数据库问题

java - 如何在 Spring Boot 应用程序中从 linux 文件系统(而不是类路径)加载信任库

hibernate - OSGI 与 hibernate : "No suitable driver found"

java - 使用 JPA 的 Spring 事务在 AfterCompletion 阶段抛出异常

java - Hibernate命名查询抛出ORA-00979 : not a GROUP BY expression