Отображение Hibernate, когда внешний ключ помещен в ссылочный класс
У меня два класса Student
а также Address
,
Student{
stuid,
stuName,
}
Address{
street,
city,
stuid;//foriegn key Ref with Studnet
}
Может ли кто-нибудь помочь мне сопоставить эти два класса, используя спящий режим??
2 ответа
Сначала вы должны узнать, что такое отображение OneToOne в спящем режиме. Во-вторых, если бы я захотел спроектировать, я бы использовал address_id в качестве внешнего ключа в таблице Student, а не идентификатор студента.
// Имя таблицы будет принято как Student, поскольку вы не указываете его с помощью аннотации @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
лица, то вам нужно иметь one-to-many
отношения между учеником и адресными классами. Студент должен знать, к каким адресам он принадлежит, а также, поскольку вам нужно сохранить идентификатор студента в таблице адресов, тогда отношения станут двунаправленными.
Объекты выглядят так:
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
}