在加载实体(通过加载或查找)之后,就在返回响应之前,我想更改实体(实际引用)。有谁知道如何做到这一点? 原因是在加载期间注入属性的实体是构建器对象。 我尝试使用像这样的PostLoadEventListener:
public void onPostLoad(PostLoadEvent event) {
Object entity = event.getEntity();
if(null != entity && entity instanceof MyBuilder){
MyBuilder builder = (MyBuilder)entity;
MyActualClass result = builder.build();
event.setEntity(result);
}
}
但似乎无论我在该事件中设置的是什么都会被忽略和丢失(这是有道理的,这就是事件的工作方式)。 似乎剩下的唯一选择是覆盖一个EntityPersister,但这太可怕了! 你知道另一种更优雅的解决方案吗? 谢谢! 克里斯蒂安
答案 0 :(得分:0)
你可以实现Hibernate的EmptyIntercepter并为onLoad方法提供实现,你可以在从数据库加载之后和发送响应之前立即执行任何操作。
您可以在http://docs.jboss.org/hibernate/core/3.3/reference/en/html/events.html
获取更多相关信息答案 1 :(得分:0)
如果您希望创建一个只读实体,那么您可以使所有的setter protected
和Hibernate使用反射来初始设置它们。然后在您的应用程序中,该对象将实际上是不可变的。
Hibernate也允许entities to be read-only,但在java意义上不是必然的。