Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaSpringJPA关系@OneToMany,内有第三列_Java_Spring_Jpa - Fatal编程技术网

JavaSpringJPA关系@OneToMany,内有第三列

JavaSpringJPA关系@OneToMany,内有第三列,java,spring,jpa,Java,Spring,Jpa,我在java Student和Group中有两个实体具有@OneToMany关系 public class Group { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; @Column(name="name") private Integer groupName; public Group(Integer groupName) { this.groupName = groupNa

我在java Student和Group中有两个实体具有@OneToMany关系

public class Group {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;

@Column(name="name")
private Integer groupName;

public Group(Integer groupName) {
    this.groupName = groupName;
}

@OneToMany
@JoinTable(name = "groups_students",
        joinColumns= @JoinColumn(name = "group_id"),
        inverseJoinColumns = @JoinColumn(name = "student_id")
)
private Set<Student> students;
}   

处理联接表中其他属性的方法是将其定义为单独的实体,然后使用中间实体拆分关系

@Entity
@Table(name = "groups_students")
public class GroupStudent {

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    private Group group;

    @Id
    @ManyToOne(fetch = FetchType.LAZY)
    private Student student;

    @Column(name = "date")
    private Date date;

    //getter-setter
}
现在修改组实体上的关系

现在,如果您想要查询诸如日期之类的附加属性,您可以使用类似这样的JPQL,例如,如果您想要获取日期在过去的组中的所有学生

@Query(SELECT s FROM Student s JOIN s.groupStudents gs WHERE gs.group = :group and gs.date < CURRENT_DATE)

好的,您尝试了什么查询?请您添加组\学生实体。您正在将其设置为多个,但试图将其作为一到多个。您可以使用本机查询并返回对象[],从对象[]可以获取所需的日期或其他字段。@emotionlessbananas感谢您的回复。代码没有此实体。它需要什么?查询是@QuerySELECT s FROM Group g join g.students s,其中g.groupName=:gName和我需要使用SELECT获取日期。在这种情况下,您需要将@JoinTable更改为@jointcolumn,并需要在学生实体内定义外键。
@OneToMany(mappedBy = "group", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();
@OneToMany(mappedBy = "student", cascade = CascadeType.ALL)
private List<GroupStudent> groupStudents = new ArrayList<>();
@Query(SELECT s FROM Student s JOIN s.groupStudents gs WHERE gs.group = :group and gs.date < CURRENT_DATE)