在更新包含另一个对象集合的对象时,我在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 table中删除了白色汽车。
| CarId | Color | GarageId |
| 2 | blue | 1 |
| 3 | red | 1 |
但是,如果我使用相同的车库调用我的更新方法但是有一个空的汽车集合,则没有汽车从Car表中删除。
任何想法我可能做错了什么?