這裏有兩個實體類Student,Homework,中間表Student_Homework
第一步,先進行常規的配置
package com.itcast.pojo;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
@Data
@Entity
@IdClass(Student_HomeworkKey.class)
@Table(name="student_homework")
public class Student_Homework implements Serializable {
private static final long serialVersionUID = 3586335994284551414L;
@Id
@ManyToOne
@JoinColumn(name="student_id")
private Student student;
// @JsonIgnore
@Id
@ManyToOne
@JoinColumn(name="homework_id")
private Homework homework;
@Column(name="submitdate")
private String submitdate;
@Column(name="content")
private String content;
@Column(name="homeworkpath")
private String homeworkpath;
@Column(name="score")
private double score;
@Column(name="status")
private char status;
//省略getset
}
第二步,配置好之後,運行出現了
does not define an IdClass的錯誤,
經查詢,得知:因爲我這裏是聯合主鍵使用了兩個@id註解
所以需要在上面定義ID類,所以需要標識@idclass("***.class")註解,這是一個特殊的id類,用來反映主鍵字段。
id類的配置如下:
public class Student_HomeworkKey implements Serializable {
private static final long serialVersionUID = 3586335994284551414L;
private Student student;
private Homework homework;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student_HomeworkKey that = (Student_HomeworkKey) o;
return Objects.equals(student, that.student) &&
Objects.equals(homework, that.homework);
}
@Override
public int hashCode() {
return Objects.hash(student, homework);
}
}
在編寫中間類的jparepository的時候,主鍵也是該ID類Student_HomeworkKey
public interface Student_HomeworkRepository extends JpaRepository<Student_Homework, Student_HomeworkKey>, JpaSpecificationExecutor<Student_Homework> {
// Student_Homework findBystudentidAndhomeworkid(String studentid ,String homeworkid);
第三步,運行的時候,再次報了錯誤
No converter found capable of converting from type [java.lang.String] to type [com.itcast.pojo.Homework]] with root cause
經查詢發現:JPA 原生 sql 的返回不能直接轉換成對象,原生 sql 的返回形式是 Map 、 List
參考博客:
https://blog.csdn.net/kejidaren/article/details/84380753
https://blog.csdn.net/wsjzzcbq/article/details/103412827