Ответ 1
Я хочу использовать один класс для сопоставления трех таблиц. Из того, что я знаю, это то, что javax.persistance предоставляет аннотацию @SecondaryTable для сопоставления двух таблиц с одним классом
используйте @Средние таблицы для сопоставления нескольких таблиц.
Вы можете сопоставить единый объект bean с несколькими таблицами, используя аннотации уровня @SecondaryTables
. Чтобы выразить, что столбец находится в конкретной таблице, используйте параметр таблицы @Column
или @JoinColumn
.
например, существует 3 объекта, а именно: Name
, Address
и Student
:
Name
объект будет выглядеть так:
@Entity
@Table(name="name")
public class Name implements Serializable {
@Id
@Column(name="id")
private int id;
@Column(name="name")
private String name;
public Name(){}
public Name(int id,String name){
this.id=id;
this.name=name;
}
//getters and setters
}
Address
объект будет выглядеть так:
@Entity
@Table(name="address")
public class Address implements Serializable {
@Id
@Column(name="id")
private int id;
@Column(name="address")
private String address;
public Address(){}
public Address(int id, String address) {
super();
this.id = id;
this.address = address;
}
//getters and setters
}
Student
объект будет выглядеть так:
@Entity
@Table(name="student")
@SecondaryTables({
@SecondaryTable(name="name", pkJoinColumns={
@PrimaryKeyJoinColumn(name="id", referencedColumnName="student_id") }),
@SecondaryTable(name="address", pkJoinColumns={
@PrimaryKeyJoinColumn(name="id", referencedColumnName="student_id") })
})
public class Student implements Serializable {
@Id
@Column(name="student_id")
private int studentId;
@Column(table="name")
private String name;
@Column(table="address")
private String address;
public Student(){}
public Student(int studentId){
this.studentId=studentId;
}
//getters and setters
}
Хранить как:
Student s= new Student(1);
session.save(s);
Name n=new Name(s.getStudentId(),"Bilal Hasan");
session.save(n);
Address address = new Address(s.getStudentId(), "India");
session.save(address);
Student ob = (Student)session.get(Student.class, s.getStudentId());
System.out.println(ob.getStudentId());
System.out.println(ob.getName());
System.out.println(ob.getAddress());
Ouput:
1
Bilal Hasan
India