使用jpa進行多對多關係配置時,遇到的問題

這裏有兩個實體類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 或 Object,因此可以使用 List<Map<String,Object>> 接收
在repository使用原生的sql的時候

參考博客:
https://blog.csdn.net/kejidaren/article/details/84380753
https://blog.csdn.net/wsjzzcbq/article/details/103412827

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章