【发布时间】:2017-12-22 21:19:07
【问题描述】:
在Hibernate创建数据库的过程中,它正在为oe_iv_student_lang表中的外键id_student添加一个唯一键约束,因为我们必须实现Serializable接口,这导致Hibernate不允许我们添加多个在其对应的子表中具有相同父外键的行。
我附上了sn-p以便更好地理解..
学生班:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "oe_iv_student")
public class OeIvStudent {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_student")
private Integer idStudent;
}
学生郎班:
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "oe_iv_student_lang")
public class OeIvStudentLang implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_student_lang")
private Integer idStudentLang;
@OneToOne
@JoinColumn(name = "id_student")
private OeIvStudent idStudent;
@Column(name = "ln_code")
private String lnCode;
}
位置类:
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToOne;
import javax.persistence.Table;
@Entity
@Table(name = "oe_locations")
public class OeLocations {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_location")
private Integer idLocation;
@OneToOne
@JoinColumn(name = "id_student", referencedColumnName = "id_student")
private OeIvStudentLang idStudent;
@Column(name = "code")
private String code;
}
我使用Serializable 接口的原因是我在OeLocations 中映射OeIvStudentLang 类的对象,但被引用的列是OeIvStudent 类。拥有OeIvStudentLang 的对象使我更容易浏览表格,即
OeLocations->OeIvStudentLang->OeIvStudent
如果我不在OeIvStudentLangclass 中使用Serializable,当我使用OeLocations 类时,Hibernate 会抛出一个Exception 说OeIvStudentLang 不是Serializable。如果我要使用一个对象OeIvStudent 的,我将无法从 OeLocations 导航到 lang 类。
请查看并提出建议。
谢谢:)
【问题讨论】:
-
请分享您的映射注释或该关联的 xml 定义。
-
如果您没有包含任何源代码,这不是一个有用的问题。仅根据两个数据库表的动画,无法判断您的代码哪里出错了。请更新您的问题以包含有关您的方法的更多信息,包括您的 Hibernate/JPA 表映射。
-
@ikettu 请查看。我也分享过。
-
@Ben 欢迎来到卡通!这里,是我的源代码。请查看并告诉我您的宝贵建议。
-
澄清一下,在你提到
oe_iv_student_lang的问题中,但代码中没有,你的意思是oe_student_lang,是吗?
标签: java hibernate junit h2 in-memory-database