我读了session.flush()


调用session.flush()时,数据将被同步(但不会提交)

什么与什么同步
是查询还是进入数据库状态
内存状态会复制到Db吗?

澄清这个PLZ。

最佳答案

调用session.flush()将导致在sessios事务范围内为您所做的所有更改生成SQL语句,并在数据库上执行这些SQL语句。

Car car = (Car) session.get(Car.class, 1);
car.setModel("Mustang");
session.flush();


最后一行将在数据库上导致UPDATE语句。但是,根据您在应用程序中处理事务的方式,在提交该部分持有的事务之前,其他用户可能看不到此更改。

尽管刷新并不是真正的双向操作,但可以使用它来确保将自动生成的标识符分配给新的实体对象。如果Car类使用自动递增的标识符映射到数据库表,则可以使用flush来确保此标识符在应用程序代码中的域对象上可用:

Car car = new Car();
car.setModel("Torino");
session.save(car);

System.out.println(car.getId());               // prints 0
session.flush();
System.out.println(car.getId());               // prints something larger than 0


假设您要发送一封电子邮件,其中包含指向新创建的汽车的链接(好的,使用用户帐户会更有意义),但是如果无法发送邮件,则希望回滚您的交易。刷新会话允许您执行此操作。

10-08 04:49