Java 同步在hibernate中意味着什么

Java 同步在hibernate中意味着什么,java,hibernate,orm,Java,Hibernate,Orm,我是在会议上读到的。flush() 调用session.flush()时,将同步(但不提交)数据 什么与什么同步。。 是否是DB状态通过查询或 内存状态将被复制到数据库 请澄清这一点 "Flushing is the process of synchronizing the underlying persistent store with persistable state held in memory." 默认情况下,刷新模式设置为自动,在这种情况下,在查询执行之前刷新会话,以确保查询不会

我是在会议上读到的。flush()

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

什么与什么同步。。 是否是DB状态通过查询或 内存状态将被复制到数据库

请澄清这一点

"Flushing is the process of synchronizing the underlying persistent
store with persistable state held in memory."

默认情况下,刷新模式设置为自动,在这种情况下,在查询执行之前刷新会话,以确保查询不会返回过时状态。

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

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

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

刷新将底层持久存储与内存中的持久状态同步,但反之亦然。换句话说,在正在运行的事务中,“内存中的状态被复制到数据库”,以重用您的字。请注意,刷新并不意味着数据不能回滚。

如果我执行事务tx=session.beginTransaction();Employee emp=会话负载(Employee.class,1L);emp.setName(“abc”);会话保存(emp)//1//提交事务tx.commit()//2现在DB状态将被复制到内存@哪一行代码?刷新不会将DB状态复制到内存。反之亦然。无法获得相同的场景。。。。。。。。会话是SessionImpl(PersistenceContext[entityKeys=[],collectionKeys=[];ActionQueue[insertions=[]更新=[]删除=[]收集创建=[]收集删除=[]收集删除=[]收集更新=[])休眠:从员工1中选择最大(id)休眠:插入员工(姓名、id)值(?,)1@abc:对不起,但是我不知道你的评论是关于什么的,我明白了。。您的代码不会打印“大于0的sonething”,它将保持不变的“0”