首页 > 解决方案 > 在弹簧靴中找不到类型 .. 的属性 ..

问题描述

我是spring的初学者,我有这个小问题。“找不到 CourseTestCompleteField 类型的属性 questionId!” 我有 2 个通过一对一连接连接的模型类。那2个模型类是:

package com.example.springboot.models;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;

@Entity
@Table(name = "questions")
public class CourseTestQuestion {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="question_id")
    private Long id;

    @NotBlank
    @Column(name = "question_course")
    private String questionCourse;

    @NotBlank
    @Column(name = "question_type")
    private String questionType;

    public CourseTestQuestion(){

    }

    public CourseTestQuestion(String questionCourse, String questionType) {
        this.questionCourse = questionCourse;
        this.questionType = questionType;
    }

    // public getters and setters for all fields here
}

和:

 package com.example.springboot.models;

import javax.persistence.*;
import javax.validation.constraints.NotBlank;


@Entity
@Table(name = "quiz_complete_field_questions",
        uniqueConstraints = {
                @UniqueConstraint(columnNames = "question_id")
        }
)
public class CourseTestCompleteField {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotBlank
    @Column(name = "question_content")
    private String questionContent;

    @NotBlank
    @Column(name = "answer")
    private String answer;

    @NotBlank
    @Column(name = "points")
    private String points;

    @NotBlank
    @Column(name = "course")
    private String course;

    @NotBlank
    @Column(name = "teacher_username")
    private String teacher;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "question_id", referencedColumnName = "question_id")
    private CourseTestQuestion courseTestQuestion;

    public CourseTestCompleteField(){

    }

    public CourseTestCompleteField(CourseTestQuestion courseTestQuestion, String question, String answer, String points, String course, String teacher) {
        this.courseTestQuestion = courseTestQuestion;
        this.questionContent = question;
        this.answer = answer;
        this.points = points;
        this.course = course;
        this.teacher = teacher;
    }

            
    // public getters and setters for all fields here
}

我对两者的回购:

    package com.example.springboot.repository;

import com.example.springboot.models.Course;
import com.example.springboot.models.CourseTestQuestion;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface CourseTestQuestionRepository extends JpaRepository<CourseTestQuestion, Long> {

    Optional<CourseTestQuestion> findById(Long id);

    Optional<CourseTestQuestion> findByQuestionCourse(String questionCourse);
}

和:

 package com.example.springboot.repository;


import com.example.springboot.models.CourseTestCompleteField;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Optional;

@Repository
public interface CourseTestCompleteFieldRepository extends JpaRepository<CourseTestCompleteField, Long> {

    Optional<CourseTestCompleteField> findById(Long id);

    Optional<CourseTestCompleteField> findByQuestionId(Long questionId);

    Optional<CourseTestCompleteField> findByCourse(String course);

    List<CourseTestCompleteField> findByQuestionContent(String questionContent);

    List<CourseTestCompleteField> findByTeacher(String teacher);

    Boolean existsByQuestionContent(String questionContent);
}

问题出在Optional<CourseTestCompleteField> findByQuestionId(Long questionId);但我不明白为什么,因为在数据库中我有带有 question_id 列的 CourseTestCompleteFieldModel 表,而在 CourseTestCompleteField 我有 CourseTestQuestion 对象。但是,CourseTestCompleteField 的表有不同的名称,这可能是一个问题吗?我应该将表重命名为 course_test_complete_field?

有人能帮助我吗?谢谢

标签: springspring-boothibernatejpa

解决方案


因为,这是对嵌套对象的查询。您需要像这样更新您的查询。

Optional<CourseTestCompleteField> findByCourseTestQuestion_Id(Long questionId);

即使没有“_”也可以使用

 Optional<CourseTestCompleteField> findByCourseTestQuestionId(Long questionId);

但最好在访问嵌套字段时放置“_”以获得更好的可读性。


推荐阅读