gpt4 book ai didi

java - Spring 启动: JPA incorrectly adds where clause

转载 作者:行者123 更新时间:2023-11-29 10:23:42 26 4
gpt4 key购买 nike

我有三个实体类; 学生主题StudentSubject

StudentStudentSubject 具有一对多关系,SubjectStudentSubject 也具有一对多关系.

学生类

@Entity
@Getter
@Setter
public class Student {
@Id
private String email;

@OneToMany(mappedBy = "student")
@JsonManagedReference
private List<StudentSubject> subjects;
//more elements
}

学科类别

@Entity
@Getter
@Setter
public class Subject {

@Id
@GeneratedValue
private Long id;

@ManyToOne
@JsonBackReference
private Teacher teacher;

@OneToMany(mappedBy = "student")
@JsonManagedReference
private List<StudentSubject> students;
//more elements
}

StudentSubject类

@Entity
@IdClass(StudentSubjectId.class)
@Getter
@Setter
public class StudentSubject implements Serializable {

//Primary keys
@Id
@Column(name = "subject_id")
Long subjectId;
@Id
@Column(name = "student_email")
String studentEmail;

String uid;

@ManyToOne
@JsonBackReference
@JoinColumn(name = "subject_id", insertable = false, updatable = false)
private Subject subject;
@ManyToOne
@JsonBackReference
@JoinColumn(name = "student_email", insertable = false, updatable = false)
private Student student;
}

我有 3 个类(class),而不是 2 个,因为每个学生学科对都有特定的属性。因此有这样的安排。

当我从存储库中读取主题时,例如

Subject subject = subjectRepository.findByNameAndTeacher(subjectName, teacher);
subject.getStudents();

除学生名单外,所有详细信息均正确。它始终为空。(通过添加断点检查)

<小时/>

Hibernate/JPA 执行的查询是,

获取主题(?)

select
subject0_.id as id1_3_,
subject0_.name as name2_3_,
subject0_.teacher_email as teacher_3_3_
from
subject subject0_
left outer join
teacher teacher1_
on subject0_.teacher_email = teacher1_.email
where
subject0_.name =?
and teacher1_.email =?

选择学生列表(?)

select
students0_.student_email as student_1_2_0_,
students0_.subject_id as subject_2_2_0_,
students0_.student_email as student_1_2_1_,
students0_.subject_id as subject_2_2_1_,
students0_.uid as uid3_2_1_,
subject1_.id as id1_3_2_,
subject1_.name as name2_3_2_,
subject1_.teacher_email as teacher_3_3_2_,
teacher2_.email as email1_5_3_,
teacher2_.name as name2_5_3_
from
student_subject students0_
left outer join
subject subject1_
on students0_.subject_id = subject1_.id
left outer join
teacher teacher2_
on subject1_.teacher_email = teacher2_.email
where
students0_.student_email =?

还有更多。

我认为这里的问题是最后一个where子句被错误地添加,并且表中的公共(public)属性没有显示一次。我该如何解决这个问题?

最佳答案

您的映射有拼写错误。在 Subject 类中,它应该是 @OneToMany(mappedBy = "subject") 而不是 mappedBy="student" 因此你的 where 子句是错误的。

这就是它使用的原因student0_.student_email = 哪里?代替where Students0_.subject_id =? 因为它认为从主题获取学生的方式是通过 student_email 列,如映射所示。

关于java - Spring 启动: JPA incorrectly adds where clause,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48732187/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com