-
所以我有一个 EJB
EjbA
和一个名为EntityA
的休眠实体。 -
EnitityA
具有属性EnitityB
和一些String
类型属性。 -
EjbA
有操纵EnitityA
的方法methodA
。
现在,如果我调用 EjbA
的methodA
,在 EJB 调用完成后,在 EnitityA
上完成的操作将反映在 db 中。
我知道当我们调用 EJB 方法时,我们实际上在其上调用了一个代理实现,它首先启动数据库事务,打开休眠会话......
但
它如何在方法调用中已更改的EntityA
上调用hibernate.update
? 基本上 EJB 容器如何知道在这个 EJB 方法调用中只修改了实体 A?
当您使用 find(( 或其他查询加载实体时,它会进入托管状态。它与特定会话绑定,当会话被关闭/刷新时,与其绑定的实体正在更新(因此所有修改都将传播到数据库中(。要更新的实体的 HasA 关系(实体 A 中的实体 B(的更新取决于级联设置。