【发布时间】:2014-11-04 11:23:48
【问题描述】:
我有两个课程Student 和Address。
Student{
stuid,
stuName,
}
Address{
street,
city,
stuid;//foriegn key Ref with Studnet
}
谁能帮我用hibernate映射这两个类??
【问题讨论】:
标签: java hibernate relationship one-to-one
我有两个课程Student 和Address。
Student{
stuid,
stuName,
}
Address{
street,
city,
stuid;//foriegn key Ref with Studnet
}
谁能帮我用hibernate映射这两个类??
【问题讨论】:
标签: java hibernate relationship one-to-one
你应该先了解什么是休眠中的 OneToOne 映射。 其次,如果我想设计,那么我会将 address_id 作为学生表中的外键,而不是学生 ID。
//表格名称将被视为学生,因为您没有使用@Table注释指定它
学生班
@Entity
public class Student{
@Id
@Column("stuid")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column("stuName")
private String name;
//setters and getters
}
地址类
@Entity
public class Address{
@Id
@Column("add_id")
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
@Column("street")
private String street;
@Column("city")
private String city;
@OneToOne(cascade={CascadeType.SAVE,CascadeType.MERGE})
@JoinColumn(name="stuid")
private Student student
//setters and getters
}
【讨论】:
假设如果 Student 可以有多个 Address 实体,那么您需要在 Student 和 Address 类之间有 one-to-many 关系。学生应该知道他们属于哪些地址,并且您需要将学生 ID 保存在地址表中,这样关系就变成了双向的。
实体看起来像这样:
Student.java
@Entity
@Table(name = "student_tbl") // Optional, By default table name is student, if you want to give different name then use this line.
public class Student1 {
@Id
@GeneratedValue
private int stuid;
private String stuName;
@OneToMany(mappedBy = "student")
private List<Address> address = new ArrayList<Address>();
// Setters & Getters
}
Address.java
@Entity
@Table(name = "address_tbl")
public class Address {
@Id
@GeneratedValue
private int addressId;
private String street;
private String city;
@ManyToOne
@JoinColumn(name="stuid")
private Student1 student;
// Setters & Getters
}
【讨论】: