私はSpring Boot + Hibernateアプリケーションで作業しています。私は、外来キーを含むOneToMany関係をどのように保存できるかを知りたかったのです。Spring Boot + Hibernateで動作しないOneToManyマッピング
私はOneToMany関係を持つ従業員と住所の2つのクラスを持っています。
@Entity
public class Employee {
@Id
@GeneratedValue
private int empId;
private String name;
private String designation;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "employee",fetch=FetchType.EAGER)
private List<Address> addresses = new ArrayList<>();
public List<Address> getAddresses() {
return addresses;
}
public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
}
@Entity
public class Address {
@Id
@GeneratedValue
private int addressID;
private String city;
private String country;
@ManyToOne(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
@JoinColumn(name = "empId")
private Employee employee;
public Employee getEmployee() {
return employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
}
ダオコード:
@Repository
public class EmployeeDao {
@Autowired
private SessionFactory sessionFactory;
public Employee save(Employee employee) {
Session session = getSession();
session.persist(employee);
return employee;
}
private Session getSession() {
return sessionFactory.getCurrentSession();
}
}
として、私はJSON POSTリクエストを使用してデータを保存しようとしています:そのはエラーなしが、アドレステーブル内のデータベースに正常に動作
{
"name": "Kamal Verma",
"designation": "SAL1",
"addresses": [
{
"city": "Noida",
"country": "India"
}
]
}
EMPID無効である。
私は、アドレステーブルの外部キーが間違って何をしているのかを教えてください。
おかげで、あなたはあなたのアドレスクラスに「従業員」フィールドを設定する必要が カマル
こんにちはKishan、あなたの提案をありがとう。出来た。ちょうどこの質問を投稿して知りたかったので、サービスを変更して解決策を見つけました。 public従業員の退職(従業員){ \t \tセット
addresses = employee.getAddresses(); (アドレスアドレス:アドレス)のため \t \t { \t \t \t address.setEmployee(従業員) \t \t} \t \t return dao.save(employee); \t}したがって、これをPojoまたはサービスに組み込むのがベストプラクティスであることを確認したいと考えました。 –私はそれをPOJOに入れることをお勧めします。これは、住所の従業員フィールドが常に設定されることを保証するためです。従業員を他の場所にも保存する場合に備えてです。 – Kishan