Liferay错误org.hibernate.MappingException:未知实体:com.mycompany.myapp.model.MyModel

时间:2016-09-29 07:14:31

标签: hibernate liferay hibernate-mapping

我正在使用Liferay 6.2 GA5社区版。

我通常在service.xml创建实体,运行服务构建器,并成功生成所有类文件。我在MyModel模型中尝试了任何CRUD操作,并始终获得成功结果。

我有一个存储过程,其输出记录列表,一条记录代表MyModel。 然后我尝试像这样调用存储过程:

SessionFactory sessionFactory = (SessionFactory) PortalBeanLocatorUtil.locate("liferaySessionFactory");
Session session = null;
try {
    session = sessionFactory.openSession();
    SQLQuery query = session.createSQLQuery("{ CALL dbo.USP_GET_CHILD(:abc) }");
    query.addEntity("MyModel", MyModel.class).setString("abc", "aaa");
    List<MyModel> list = (List<MyModel>) query.list();
    _log.info("size: " + list.size());
    for (MyModel o : list) {
        _log.info("result: " + o.getFullName());
    }
} catch (Exception e) {
    _log.error(e.getMessage(), e);
}

从上面的代码中,我在第org.hibernate.MappingException: Unknown entity: com.mandiri.ipsplus.model.MyModel

处收到错误query.list()

我知道这件事发生了,因为我放了.addEntity("MyModel", MyModel.class)

但如果我没有这样做,我将始终ClassCastCastExceptionfor (MyModel o : list)行,因为我试图将Hibernate默认模型转换为MyModel。

在搜索了这种异常之后,我在Hibernate特定的主题中得到了一些文章,说我必须在MyModel中添加@Entity注释。但是在Liferay中,模型将始终从service.xml生成,对吧?

如何解决这个问题? service.xml中是否有任何属性或任何可以解决此问题的XML文件配置?

非常感谢

1 个答案:

答案 0 :(得分:1)

您是否将ServiceBuilder生成的实体与原始hibernate访问混合在一起?我建议您留在ServiceBuilder端(主要是隐藏hibernate)或者一直休眠并省略ServiceBuilder。

在Liferay的上下文中(例如,需要涵盖在多个上下文中部署的应用程序)ServiceBuilder有其优点:无论在哪个Web应用程序中部署,都可以轻松访问所有插件/ portlet中的API。