gpt4 book ai didi

java - hibernate - 使用 addJoin 的多对一

转载 作者:行者123 更新时间:2023-11-30 07:32:46 24 4
gpt4 key购买 nike

我有一个多对一的关系,其中一个 MessageContents 对象有一组消息,每个消息都有一个指向 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 cannot be cast to 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com