Spring Data JPA 中的不兼容类型引用和引用列
Incompatible type referencing and referenced column in Spring Data JPA
我希望我的 ID 是 uuid 并且 Student 和 course 之间应该是多对一的关系。我得到了不兼容的类型引用列和引用列。
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;
}
Course.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
请了解如何创建关联
what is @JoinColumn and how it is used in Hibernate
切勿使用 courseId
之类的原始 ID!您已经与 @JoinColumn
注释建立了 @ManyToOne
关联。 Hibernate 足够聪明,可以理解 course_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;
}
我希望我的 ID 是 uuid 并且 Student 和 course 之间应该是多对一的关系。我得到了不兼容的类型引用列和引用列。
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;
}
Course.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
请了解如何创建关联
what is @JoinColumn and how it is used in Hibernate
切勿使用 courseId
之类的原始 ID!您已经与 @JoinColumn
注释建立了 @ManyToOne
关联。 Hibernate 足够聪明,可以理解 course_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;
}