employee と phone_number という 2 つのテーブルがあり、employee が複数の番号を持つことができるとします。
たとえば、次の 2 つのテーブルがあります。
1) employee
columns:
id
name
2) phone_number
columns:
employee_id(FK)
phone_number_type
phone_number
employee と phone_number には、(FK として機能する phone_number の employee_id 列) との 1 対多のマッピングがあります。
モデル クラスで次の注釈を定義しました。
@Entity
@Table(name="employee")
public class Employee
@Id
@GeneratedValue
private Integer id;
@OneToMany(fetch = FetchType.LAZY, mappedBy="employee_id")
@JoinColumn(name = "ID")
private Set<PhoneNumber> phonenumbers = new HashSet<PhoneNumber>(0);
public Set<PhoneNumber> getPhonenumbers() {
return phonenumbers;
}
public void setPhoneNumbers(Set<PhoneNumber> phonenumbers) {
this.phonenumbers = phonenumbers;
}
クラス電話番号
@Entity
@Table(name="phone_number")
public class PhoneNumber {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "employee_id")
private Employee employeeid;
public Employee getEmployeeid() {
return this.employeeid;
}
public void setEmployeeid(Employee employeeid) {
this.employeeid = employeeid;
}
私の質問は、すべての従業員または特定の従業員を取得するときに、電話番号も取得したいということです。現在、デバッグ モードで実行すると、入力されている電話番号が表示されません。springmvc フレームワークで休止状態を実行しており、次のコードで従業員を取得しています。
@Override
@SuppressWarnings("unchecked")
public List<Employees> getEmployees() {
// TODO Auto-generated method stub
return getCurrentSession().createQuery("from Employees").list();
}
phone_numbers を返すために私がしなければならないことはありますか。私の最終的な目標は、従業員と電話番号を表形式でビューに表示することです。
ありがとうございました
「fetch = EAGER」を作成したときにデバッグしようとしましたが、値が表示されませんでした。電話データをプルしていることを確認するにはどうすればよいですか?
List<Employees> _employees= employeeService.getEmployees();
for (Employees o: _employees) {
java.util.Set<PhoneNumber> a = o.getPhonenumbers();
}
犯した間違いを見つけましたが、別の問題に直面しています。私の間違いは、employee_id フィールドが FK であるにもかかわらず、適切に入力されていなかったことです。ただし、この列は phone_number テーブルの主キーではありません。
phone_number を次のように変更しました。
@Entity
@Table(name="phonenumber")
public class Phonenumber {
@EmbeddedId
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "EMPLOYEEID")
private Employee employeeid;
ただし、現在次のエラーが発生しています: 原因: org.hibernate.MappingException: Composite-id クラスは Serializable を実装する必要があります:
このエラーは解決できましたが、別の興味深いエラーが発生しています。電話番号の最初の行のみを選択しています。
@Entity
@Table(name="phonenumber")
public class Phonenumber implements Serializable {
@Column(name="key")
private String key;
@Column(name="value")
private String value;
@Id
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "EMPLOYEEID")
private Employee employee;
従業員
@Entity
@Table(name="employee")
public class Employee{
@Id
@GeneratedValue
private Integer id;
@OneToMany(mappedBy = "employeeid", fetch = FetchType.EAGER)
private Set<Phonenumber> phonenumbers= new HashSet<Phonenumber>(0);