別のオブジェクトのコレクションを含むオブジェクトを更新するときに、Hibernate で問題が発生します。外観は次のとおりです。
@Entity
@Table(name = "Garage")
public class Garage {
@OneToMany(targetEntity = Car.class, cascade = CascadeType.ALL, fetch = FetchType.LAZY, mappedBy = "garage", orphanRemoval = true)
public Set<Car> getCars() {
return cars;
}
}
次に、Car クラスがあります。
@Entity
@Table(name="Car", uniqueConstraints=@UniqueConstraint(columnNames={"GarageId"}))
public class Car {
private Garage garage;
@ManyToOne(optional=false)
@JoinColumn(name="GarageId")
public Garage getGarage() {
return garage;
}
}
ガレージには次のサービスがあります。
@Transactional
public class GarageService {
public void updateGarage(Session session, Garage garage) {
session.update(garage);
}
}
ここで、データベースに白、青、赤の車があるガレージがあるとします。
| GarageId |
| 1 |
| CarId | Color | GarageId |
| 1 | white | 1 |
| 2 | blue | 1 |
| 3 | red | 1 |
同じガレージで青と赤の車だけを指定して更新メソッドを呼び出すと、更新は成功します。データベースは白い車を Car テーブルから削除しました。
| CarId | Color | GarageId |
| 2 | blue | 1 |
| 3 | red | 1 |
ただし、同じガレージで空の車のコレクションを指定して更新メソッドを呼び出すと、Car テーブルから車が削除されません。
私が間違っているかもしれないアイデアはありますか?