这里有两个实体类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