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 应用程序他们部署在。
我正在使用 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 应用程序他们部署在。