是否有关于Hibernate事件类型的文档?

时间:2015-05-27 15:46:46

标签: java hibernate

我通常对发布这样的问题非常犹豫,但我似乎找不到任何可用的东西:是否有关于Hibernate事件的任何文档,即事件的意思,当它们被抛出时,它们包含哪些数据等?

非常感谢任何提示或链接。

要获取事件列表,我可以查看org.hibernate.event.spi.EventType,然后从该类中我可以获得实际的事件类。但是,关于这些类的文档很少,而且hibernate用户手册或开发人员指南也没有提供任何内容(只是如何注册监听器,但实际上这很简单)。

我已经尝试添加只在调用它们时记录的侦听器,但是输出顺序有些令人困惑,而且我很难对所调用的内容进行假设。

注意:以下示例可能看起来很长且很抽象,并试图说明我的问题。我在这里只讨论了2个事件,而另外33个事件似乎没有记录。

有2名听众:

  • PreloadEventListener - JavaDoc说Called before injecting property values into a newly loaded entity instance.
  • LoadEventListener - JavaDoc说Defines the contract for handling of load events generated from a session.

正如您所看到的,JavaDoc并没有提供太多信息,至少对于LoadEventListener。这两个事件实际上可能指的是不同的情况,但正如我已经说过的那样,我无法找到相关的文档。

并不总是按照看起来相同的顺序调用侦听器。 我将两个监听器添加到我们现有的一个Web应用程序中进行了一些点击。

以下是结果(抽象输出):

行动1输出

preload: entity of type A with id 0

行动2输出

preload: entity of type A with id 1
load: entity of type A with id 1
preload: entity of type B with id 0

行动3输出

preload: entity of type C  with id 0
load:    entity of type D  with id 0
load:    entity of type E  with id 0
load:    entity of type F  with id 0
load:    entity of type A  with id 0
preload: entity of type F' with id 0
preload: entity of type A  with id 0
load:    entity of type C  with id 0
...
load:    entity of type A  with id 0
load:    entity of type C  with id 0

描述我们在这些行动中所做的事情将超出范围,但正如您所看到的,我们主要是在处理简单实体和更复杂的行动结构。

正如您所看到的,有时只会触发预加载事件(例如{1}}在行动1中),有时只有一个加载(例如A在行动3),有时会有预加载后的多个加载事件(例如,行为中的F)或甚至交替加载和预加载事件(例如,行动3中的C)。

A将是F'的子类,可能会解释F加载后F'的预加载,但其他情况并不容易解释。我确定有一个确定性的顺序和某些事件未被调用的原因,但正如我最初所说,我错过了相关的文档。

对于那些读过那些"短"例如:我希望它不会让你感到困惑。如果需要,我可以提供一个更具特色的例子,甚至可能更简单一个,但我感觉这些更简单的例子更容易解释结果,而我们更复杂的现实世界案例仍然没有得到很好的理解。正如我所说,我正在寻找35种Hibernate事件类型的一些文档,而不是对所描述的案例的详细解释。

0 个答案:

没有答案