Отображение 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
}
Другие вопросы по тегам