gpt4 book ai didi

java - 无法离开加入第二张 table

转载 作者:行者123 更新时间:2023-12-02 02:08:09 26 4
gpt4 key购买 nike

我试图左连接第二个表,但它没有显示。它只是为我提供了所有用户,而不是所有用户以及 FinishedExams。

这是我的存储库中的方法:

public interface IUserRepository extends CrudRepository<User, Integer> {
@Query("SELECT u FROM User u LEFT JOIN FinishedExam f ON u.id = f.user")
List<User> getAllWithExams();
}

在我的 FinishedExamController 中:

@Autowired
private IFinishedExamRepository finishedExamRepository;

@Autowired
private IUserRepository userRepository;

@GetMapping("/allUsersWithExams")
@Fetch(FetchMode.SELECT)
public Iterable<User> getAllUsersWithTheirExams()
{
return userRepository.getAllWithExams();
}

我的用户模型:

@Entity
@Table(name = "users")
public class User implements Serializable {
@Id
@GeneratedValue()
@Column(name = "id")
private int id;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "role_id", nullable = false)
public Role role;

public String getStudentNumber() {
return studentNumber;
}

public void setStudentNumber(String studentNumber) {
this.studentNumber = studentNumber;
}

@Column(name = "student_number", nullable = true)
private String studentNumber;

@Column(name = "first_name", nullable = true)
private String firstName;

@Column(name = "last_name", nullable = true)
private String lastName;

@Column(name = "email", nullable = true, unique = true)
private String email;

@OneToOne(fetch = FetchType.EAGER, mappedBy = "user")
private FinishedExam finishedExam;

@JsonIgnore
@Column(name = "password", nullable = true)
private String password;


@Column(name = "created_at")
private LocalDateTime createdAt;

@Column(name = "updated_at")
private LocalDateTime updatedAt;


@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(
name = "event_users",
joinColumns = @JoinColumn(name = "user_id", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "event_id", referencedColumnName = "id")
)

@PreUpdate
protected void onUpdate() {
updatedAt = LocalDateTime.now();
}

@PrePersist
protected void onCreate() {
createdAt = LocalDateTime.now();
updatedAt = createdAt;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getEmail() {
return email;
}

public void setEmail(String email) {
this.email = email;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}


public LocalDateTime getCreatedAt() {
return createdAt;
}

public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}

public LocalDateTime getUpdatedAt() {
return updatedAt;
}

public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}

public String getRole() {
return role.getName();
}

public void setRole(Role role) {
this.role = role;
}
}

完成的考试模型:

@Entity
@Table(name = "finished_exams")
public class FinishedExam implements Serializable {
@Id
@GeneratedValue()
@Column(name = "id")
private int id;

@OneToOne(fetch = FetchType.EAGER)
@Fetch(FetchMode.SELECT)
@JoinColumn(name = "user_id")
private User user;

@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "exam_id")
private Exam exam;

@Column(name = "finishedExam", nullable = false)
private String finishedExam;

@Column(name = "created_at")
private LocalDateTime createdAt;

@Column(name = "updated_at")
private LocalDateTime updatedAt;

@PrePersist
protected void onCreate() {
createdAt = LocalDateTime.now();
updatedAt = createdAt;
}


@PreUpdate
protected void onUpdate() {
updatedAt = LocalDateTime.now();
}

public int getId() {
return id;
}

public User getUser() {
return user;
}

public void setUser(User user) {
this.user = user;
}

public Exam getExam() {
return exam;
}

public void setExam(Exam exam) {
this.exam = exam;
}

public String getFinishedExam() {
return finishedExam;
}

public void setFinishedExam(String finishedExam) {
this.finishedExam = finishedExam;
}

public void setId(int id) {
this.id = id;
}

public LocalDateTime getCreatedAt() {
return createdAt;
}

public void setCreatedAt(LocalDateTime createdAt) {
this.createdAt = createdAt;
}

public LocalDateTime getUpdatedAt() {
return updatedAt;
}

public void setUpdatedAt(LocalDateTime updatedAt) {
this.updatedAt = updatedAt;
}
}

我可以在 ON 子句中添加任何我想要的内容,但不会发生任何变化。

最佳答案

您需要提供从您的实体到目标实体的路径才能加入:

替换查询

@Query("SELECT u FROM User u LEFT JOIN FinishedExam f ON u.id = f.user")

@Query("SELECT u FROM User u LEFT JOIN u.finishedExam f ON u.id = f.user.id")

关于java - 无法离开加入第二张 table ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50428016/

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