我有一个多对一的关系,其中 MessageContents 对象具有一组 Message,并且每个 Message 都有一个 MessageContents 的外键。
我有以下查询:
String sqlQuery = "SELECT " +
" {msg.*}, "+
" {msc.*} "+
"FROM analyticsintegrationservices.Messages AS msg " +
"LEFT OUTER JOIN analyticsintegrationservices.message_contents AS msc " +
" ON msg.content_key = msc.unique_key " +
"WHERE msg.sequence_received < 10";
当我查询它时,我希望 hibernate 将结果集映射到 Messages 对象列表。 当我尝试以下代码时,我得到了 MessageContents 结果集:
Query query = session.createSQLQuery( sqlQuery )
.addEntity( "msc", MessageContents.class )
.addJoin( "msg", "msc.message" )
.addJoin( "msc", "msg.messageContents" );
query.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY );
//query.list() returns a list of MessageContents.
但是,当我运行以下代码时,出现异常“org.hibernate.type.SetType 无法转换为 org.hibernate.type.EntityType”
Query query = session.createSQLQuery( sqlQuery )
.addEntity( "msg",Messages.class )
.addJoin( "msc","msg.messageContents" )
.addJoin( "msg", "msc.message" );
query.setResultTransformer( Criteria.DISTINCT_ROOT_ENTITY );
// org.hibernate.type.SetType cannot be cast to org.hibernate.type.EntityType
异常发生在线路上
.addJoin( "msg", "msc.message" );
如何使用 sqlQuery 获取消息列表?
最佳答案
假设您的映射正确,您应该这样做:
Query query = session.createSQLQuery( sqlQuery )
.addEntity("msg", Messages.class )
.addJoin("msc", "msg.messageContents" ).
.addEntity("msg", Messages.class)
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
List<MessageContents> yourList = query.list();
yourList 将包含 MessageContents 实体列表,其中关联的 messageContents 实体已完全初始化。
重复
.addEntity("msg", Messages.class)
是必要的,因为
.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
对最后添加的实体进行操作。
关于java - hibernate - 使用 addJoin 进行多对一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6333872/