当前位置: 首页 > 知识库问答 >
问题:

Spring数据JPA中的类型引用和引用列不兼容

司马同
2023-03-14

我希望我的ID是uuid,学生和课程之间应该有多对一的关系。我得到不兼容的类型引用列和引用列。

Student.java

package com.test.model;

import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Type;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name="student",schema="mydb")
public class Student {
    
    @Id
    @Type(type="uuid-char")
    @Column(name="student_id")
    private UUID studentId;
    
    @Column(name="name")
    private String sudentName;
    
    @ManyToOne
    @JoinColumn(name="course_id")
    private Course course;
    
    @Column(name="course_id",insertable = false,updatable = false,nullable = false)
    private UUID courseId;

}

课程JAVA

package com.test.model;

import java.util.UUID;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

import org.hibernate.annotations.Type;

import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Entity
@Table(name="course",schema="mydb")
public class Course {
    
    @Id
    @Type(type="uuid-char")
    @Column(name="id")
    private UUID id;
    
    @Column(name="courseName")
    private String courseName;

}

例外

Caused by: java.sql.SQLException: Referencing column 'course_id' and referenced column 'id' in foreign key constraint 'FKdfypyqt0stgfc0aij9kcxm99s' are incompatible.
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.28.jar:8.0.28]
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.28.jar:8.0.28]
    at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:763) ~[mysql-connector-java-8.0.28.jar:8.0.28]
    at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:648) ~[mysql-connector-java-8.0.28.jar:8.0.28]
    at com.zaxxer.hikari.pool.ProxyStatement.execute(ProxyStatement.java:94) ~[HikariCP-4.0.3.jar:na]
    at com.zaxxer.hikari.pool.HikariProxyStatement.execute(HikariProxyStatement.java) ~[HikariCP-4.0.3.jar:na]
    at org.hibernate.tool.schema.internal.exec.GenerationTargetToDatabase.accept(GenerationTargetToDatabase.java:54) ~[hibernate-core-5.6.4.Final.jar:5.6.4.Final]
    ... 33 common frames omitted

共有1个答案

葛晔
2023-03-14

请学习如何创建关联

@JoinColumn是什么,在Hibernate中是如何使用的

永远不要使用原始ID,比如courseId!你已经有了@manytone@JoinColumn注释的关联。Hibernate足够聪明,能够理解课程id将被用作外键。

@Table(name="student",schema="mydb")
public class Student {
    
    @Id
    @Type(type="uuid-char")
    @Column(name="student_id")
    private UUID studentId;
    
    @Column(name="name")
    private String sudentName;
    
    @ManyToOne
    @JoinColumn(name="course_id")
    private Course course;

}
 类似资料:
  • 我正在使用JPA,列类型为: 我使用PostgreSql作为我的数据库,它支持bpchar类型,现在我尝试为我的测试添加H2,但问题是,当我运行测试时,我得到以下结果: 是否有其他方法可以实现这一目标?

  • 本文向大家介绍JavaScript数据类型之基本类型和引用类型的值,包括了JavaScript数据类型之基本类型和引用类型的值的使用技巧和注意事项,需要的朋友参考一下 ECMAScript变量包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 在将一个值赋给变量时,解析器必须确定这个值是基本类型还是引用类型。基本类型包括如Unde

  • 给定以下代码,ReSharper会给出错误 null

  • 在之前的 JavaScript 基础文章中(编号 02、编号 07),我们介绍过,变量有以下数据类型: 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定义。 引用数据类型(引用类型):Object 对象。 本文,我们针对这两种类型,做个详细介绍。我们先来看个例子。 基本数据类型举例: var a = 23;

  • 我正在开发一个使用Spring数据和JPA来实现基于REST的服务的应用程序。我想使用elastcSearch作为索引引擎。我的域对象: 执行时,我得到以下异常:

  • Obj类型 创建方法:1.new Func() 使用构造函数 2.对象字面量 访问属性:1.obj['name'] 2.obj.name 第一种可以通过变量访问属性,可以使用会导致语法错的的字符串表示属性名 ES6对对象进行了扩展: 可以在对象中只写属性名,属性值则为属性名代表的变量;方法可以简写为 func(){}这种形式 对象字面量定义时,可以在‘[]'内用表达式作为属性名 Object.is