2016-09-29 85 views
0

我正在使用Liferay 6.2 GA5 Community Edition。Liferay錯誤org.hibernate.MappingException:未知實體:com.mycompany.myapp.model.MyModel

我通常在我的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)

但如果我沒有這樣做,我總是會得到ClassCastCastException在線for (MyModel o : list),因爲我試圖將Hibernate默認模型轉換爲MyModel。

搜索到這種異常後,我在Hibernate特定的主題中找到了一些文章,說我必須在MyModel中註釋@Entity。但在Liferay中,模型將始終從service.xml生成,對吧?

如何解決這個問題? service.xml或任何可解決此問題的XML文件配置中是否有任何屬性?

非常感謝您

回答

1

您是否將ServiceBuilder生成的實體與原始休眠訪問混合在一起?我寧願建議你留在ServiceBuilder一邊(主要隱藏你的休眠),或者你一直休眠並忽略ServiceBuilder。

在Liferay的上下文中(例如需要覆蓋部署在多個上下文中的應用程序)ServiceBuilder有其優點:無論部署哪個Web應用程序,都可以輕鬆訪問所有插件/ portlet中的API。

+0

謝謝,我已經刪除了'.addEntity()'方法,並且對'query.list()'的結果進行了適當的轉換,現在它已經可以工作了 – danisupr4

相關問題