我有一张表Marital Status with values" single"," married"等
我有一个以personal_status_id作为外键的表格。
我如何映射这个?任何帮助将不胜感激,因为我是Hibernate的新手。或者我不需要这个,因为人与婚姻状况之间没有关系,只是一个参考?
答案 0 :(得分:2)
首先,婚姻状况不需要单独的表(是吗?真的吗?)。它可以使用单个字符处理(非常有效)
但是,在您的情况下,
@Entity
@Table(name="PERSON")
Class Person(){
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 15, scale = 0)
private Long id;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="MARITAL_STATUS_ID")
MaritalStatus maritalStatus;
}
和
@Entity
@Table(name="MARITAL_STATUS")
Class MaritalStatus(){
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 15, scale = 0)
private Long id;
@OneToMany(mappedBy="maritalStatus")
Set<Person> persons;
}
答案 1 :(得分:1)
婚姻状况应该在Java中用enum表示,以排除不必要的连接,因为没有太多的选项,它们永远不会改变。
查看@Enumerated(EnumType.STRING)
注释:http://docs.oracle.com/javaee/6/api/javax/persistence/Enumerated.html
答案 2 :(得分:0)
您尚未指定是否坚持一对一关系或不关心,以及您是否更喜欢使用Enum而不是类。
如果你想在你的表之间建立这样的关系,这个链接提供了一些有关hibernate一对一映射的有用信息:one-to-one example
然而,不太推荐使用hibernate一对一映射,您可以简单地使用一对多映射,如下所示:
@Entity
@Table(name = "Person")
public class Person {
@Id
@GeneratedValue
int id;
@OneToMany(mappedBy = "Person", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
Private MaritalStatus;
}
@Entity
@Table(name = "MaritalStatus")
public class Person {
@Id
@GeneratedValue
int id;
@ManyToOne
Person person = new Person();
}
这种方法很简单,但您可能更喜欢使用枚举而不是类,并使用枚举映射表。这种方法实施起来有点困难,这篇文章为您提供了所需的全部内容:Mapping enum to a table
答案 3 :(得分:0)
我想在下面
人物实体:
@Entity
@Table(schema = "Person")
public class Person {
@Id
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "marital_status_id")
private MaritalStatus maritalStatus;
}
婚姻状况实体:
@Entity
@Table(schema = "MaritalStatus")
public class MaritalStatus {
@Id
private String id;
@Column(name = "status")
private String status;
}