java - hibernate - 使用 addJoin 进行多对一

标签 java sql hibernate hibernate-mapping

我有一个多对一的关系,其中 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/

相关文章:

sql - 两个并发但相同的 DELETE 语句会导致死锁吗?

java - HQL 不返回结果,但生成的 SQL 在 SQL Developer 上完美运行

java - hibernate ehcache测试失败

java - 仅包含 hibernate.properties 文件的 Hibernate 配置。没有任何 hibernate.cfg.xml

Java 这个错误是什么意思?

mysql - 使用 ESCAPE 关键字进行 SQL 转义 - 如果转义字符出现在 LIKE 值中会怎样

java - 使用双向链表的哨兵方法

java - JPA多次返回同一个对象

java - 需要正则表达式来对此进行模式化

java - 重定向到另一个 JSF 后如何显示成功消息?