Hibernate:更新父级时更新子级

时间:2016-04-18 15:00:26

标签: java hibernate collections hibernate-cascade

在更新包含另一个对象集合的对象时,我在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表中删除。

任何想法我可能做错了什么?

0 个答案:

没有答案