Java 当我在会话中修改实体时,hibernate如何检测更改
我想知道Hibernate内部的工作原理 我在DB有一个人叫“彼得” 现在这个人在DB里的名字改成了“乔伊” 那是怎么发生的 当我改变了那个人的名字。hibernate是如何检测到更改的?该方法使当前会话中的数据与数据库中的数据同步 根据javadoc: 刷新是同步底层持久化进程的过程 存储在内存中的持久状态Java 当我在会话中修改实体时,hibernate如何检测更改,java,hibernate,Java,Hibernate,我想知道Hibernate内部的工作原理 我在DB有一个人叫“彼得” 现在这个人在DB里的名字改成了“乔伊” 那是怎么发生的 当我改变了那个人的名字。hibernate是如何检测到更改的?该方法使当前会话中的数据与数据库中的数据同步 根据javadoc: 刷新是同步底层持久化进程的过程 存储在内存中的持久状态 请注意,您使用了方法session.get(请参阅),这将返回一个持久实例 Hibernate会话跟踪持久实例,并在会话刷新时将更改持久化到数据库。所以,若您对持久实例进行了更改,那个么这
请注意,您使用了方法session.get(请参阅),这将返回一个持久实例 Hibernate会话跟踪持久实例,并在会话刷新时将更改持久化到数据库。所以,若您对持久实例进行了更改,那个么这些更改将在会话刷新时传播到数据库
持久实体通过session.execute()、session.clear()和session.close()调用与会话分离 谢谢,但是我想知道Session怎么知道我已经更改了personWell,我猜
Person
是一个映射类(与数据库中的Person
表相关),不是吗?这是否意味着当我调用Session.flush时,Session将检测到更改?当您实例化Person
类时,它与当前的会话关联。会话刷新时,它会将数据库与所有关联的类同步。@SajanChandran hibernate是如何检测到的?此链接解释hibernate检测到更改并执行适当的查询。是否确定session.flush()
进行基础数据库更改?我认为,在flush()
之后,更改仍然是未提交的更改,真正的更改将在提交时进行。您可以在flush
之后,但不能在commit
之前,使用SQL命令检查数据库。除非在flush模式中另有规定,否则这是默认的休眠行为
Session session = SessionFactory.openSession();
Person p = session.get(Person.class, 1);//Peter's id is 1
System.out.println(p.getName());//output : Peter
p.setName("Joey");
session.flush();
session.close();