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

Liferay error org.hibernate.MappingException: Unknown entity: com.mycompany.myapp.model.MyModel

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

我通常在 service.xml、运行 Service Builder 中创建实体,并成功生成了所有 类 文件。我在 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);
}

从上面的代码中,我在第 query.list()

行收到错误 org.hibernate.MappingException: Unknown entity: com.mandiri.ipsplus.model.MyModel

我知道这是因为我输入了 .addEntity("MyModel", MyModel.class),

但如果我不这样做,我总是会在第 for (MyModel o : list) 行得到 ClassCastCastException,因为我试图将 Hibernate 默认模型转换为 MyModel。

搜索此类异常后,我在 Hibernate 特定主题中找到了一些文章,其中说我必须在 MyModel 中放置 @Entity 注释。但是在 Liferay 中,模型总是从 service.xml 生成的,对吧?

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

非常感谢

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

在 Liferay 的上下文中(例如需要覆盖部署在多个上下文中的应用程序)ServiceBuilder 有其优点:您可以轻松地访问您的 API 在所有 plugins/portlets 中,无论是哪个 Web 应用程序他们部署在。