使用 hibernate 与 spring data jpa 和 mysql 组合主键

我正在尝试测试一个组合主键,不幸的是有些东西运行不正确。


包含组合主键的课程类


@Entity(name = "Course")

public class Course {

    @EmbeddedId

    private PkCourse pkCourse;


    public Course() {}


    public Course( PkCourse pkCourse) {

        this.pkCourse = pkCourse;

    }

    public PkCourse getPkCourse() {

        return pkCourse;

    }

    public void setPkCourse( PkCourse pkCourse ) {

        this.pkCourse = pkCourse;

    }

}

表示组合主键的类


@Embeddable

public class PkCourse implements Serializable {


    @Column(name = "courseName")

    private String courseName;


    @Column(name = "courseGrade")

    private Integer grade;


    PkCourse(){

    }

    public PkCourse( String courseName, Integer grade ) {

        this.courseName = courseName;

        this.grade = grade;

    }


    public String getCourseName() {

        return courseName;

    }

    public void setCourseName( String courseName ) {

        this.courseName = courseName;

    }


    public Integer getGrade() {

        return grade;

    }

    public void setGrade( Integer grade ) {

        this.grade = grade;

    }

    @Override

    public boolean equals( Object o ) {

        if (this == o) return true;

        if (o == null || getClass() != o.getClass()) return false;

        PkCourse pkCourse = (PkCourse) o;

        return courseName.equals(pkCourse.courseName) &&

                Objects.equals(grade, pkCourse.grade);

    }

    @Override

    public int hashCode() {

        return Objects.hash(courseName, grade);

    }

}

我的测试程序


private void composedPrimaryKey() {

        PkCourse composedPK = new PkCourse("database", 3);

        Course course = new Course(composedPK);

        courseRepository.save(course);

    }

我的 jpa 存储库


public interface CourseRepository extends JpaRepository<Course, PkCourse> {

}

我得到的例外

原因:org.springframework.dao.InvalidDataAccessResourceUsageException:无法提取结果集;SQL [不适用];嵌套异常是 org.hibernate.exception.SQLGrammarException: 无法提取 ResultSet

Caused by: java.sql.SQLSyntaxErrorException: 表 'company.course' 不存在


有只小跳蛙
浏览 127回答 1
1回答

慕婉清6462132

如果你看看 DDLcreate table course (&nbsp; course_name varchar(255) not null,&nbsp; course_grade integer not null,&nbsp; primary key (course_name, course_grade)) engine=MyISAM" via JDBC Statement表中索引的值的大小有限制MyISAM,这个默认大小也依赖于你的 MySQL 版本现在创建这样的表的理想方法不是使用course_nameandcourse_grade作为主键,而是应该使用 auuid或 auto gen&nbsp;id,然后将唯一索引放在course_nameand的组合上course_grade。如果您仍然遇到问题,您还可以尝试此答案中提到的线程中提到的不同修复方法SET @@global.innodb_large_prefix = 1;升级到更高版本的 MySQL 5.7+set GLOBAL storage_engine='InnoDb';
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java