我在 session.flush() 上读到了这一点
的 调用 session.flush() 时数据将被同步(但不提交)
什么与什么同步.. 是否是通过查询或查询进入内存的数据库状态 内存状态将被复制到Db?
请澄清一下..
最佳答案
调用 session.flush()
将导致为您所做的所有更改生成 SQL 语句,并在 sessios 事务范围内对数据库执行这些 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
假设您想发送一封包含新创建汽车链接的电子邮件(好吧,用户帐户会更有意义),但如果邮件无法发送,您希望回滚您的交易。刷新 session 允许您执行此操作。
关于java - hibernate中的同步是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2573941/