在上一讲中我们看到两次发出的sql语句是一样的,也就是说两种情况对数据库的操作是一样的,为什么会这样呢?
主要是由于,级联更新在实体是游离状态下才起作用现在依然使用上一讲的实体bean;
第一次在Garage.java 不添加CascadeType.MERGE注解
@OneToMany(cascade={CascadeType.PERSIST},mappedBy="garage")
public Set<Auto> getAutos() {
return autos;
}
重新编写单元测试方法
@Test public void update() {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa-hibernate");
EntityManager em = factory.createEntityManager();
em.getTransaction().begin();
Garage garage = em.find(Garage.class, 1);
em.clear(); //改为游离状态
garage.setGaragenum("RoomTOP");
em.merge(garage);
em.getTransaction().commit();
em.close();
factory.close();
}
运行之后
观察发出的sql语句
Hibernate: select garage0_.gid as gid1_0_, garage0_.garagenum as g