我正在尝试使用 org.hibernate.Interceptor.instantiate() 来拦截实例化(显然)并使用默认构造函数之外的构造函数手动实例化特定对象。如果要阅读此方法的 JavaDoc,实际上,这似乎就是 Hibernate 公开此类内容的全部意义。
但是,我得到的只是实体名称、EntityMode
和 Serialized
标识符。因此,除非我的目标是调用一个将 ID 作为唯一参数的构造函数,否则我就是 SOL。如果这个方法只给我足够的信息来调用另一个(非常具体的)构造函数,为什么还会存在?我应该如何检索其他实体属性的值?
编辑:显然,经过更多的工作和研究,我想做的事情是不可能的。所以我只是接受了迈克的回答,然后就到此为止了。
最佳答案
调用实例化拦截器以允许您提供自定义机制,用于在设置新映射实体的任何属性之前实例化该实体。由于该实体在调用该拦截器之前并不存在,因此不可能设置其任何属性。在生命周期的此时,Hibernate 知道的唯一值是实体的类型和要为其分配的 ID。您可以使用此拦截器根据配置设置等来更改实例实例化,但不能根据实例化后设置的属性值来更改实例实例化。
你想用这个来实现什么目的?
关于java - Hibernate拦截器.instantiate(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442807/