【问题标题】:JPA @Query Left join same entityJPA @Query 左连接同一实体
【发布时间】:2018-11-13 08:26:10
【问题描述】:

我的查询使用左连接时遇到问题

我有一个这样的自定义实体:

public class Form{
  UserEntity currentUser;
  UserEntity prevUser;
  long id;
  //getters and setters
}

现在我的@Query 看起来像这样。

@Query(SELECT NEW com.package.forms.Form(room.cUser,room.pUser,room.id) FROM Room room
 LEFT JOIN room.cUser cuser LEFT JOIN room.pUser puser WHERE room.id = :id)

日志查询被转换成这样:

select room0_.c_user,room0_.p_user,room0.id FROM room room0_ left outer join user user1_ on room0_.c_user = user1_.id
inner join user user2_ inner join on room0_.p_user = user2_.id

这个查询没有给我任何结果。但是,当我将转换后的查询粘贴到 sql server 并将内部联接更改为左联接时,我得到了结果。如何让两个实体都使用左连接?

我无法使用本机查询,因为我在此处为我的自定义类使用 select new。

【问题讨论】:

    标签: sql-server spring-boot spring-data-jpa


    【解决方案1】:

    怎么样

    SELECT NEW com.package.forms.Form(cuser, puser, room.id)
    

    而不是

    SELECT NEW com.package.forms.Form(room.cUser,room.pUser,room.id)
    

    如果你这样做,我认为你必须使用加入实体的alias

    【讨论】:

      【解决方案2】:

      我解决了。我刚刚切换了我的加入顺序。我无法显示它,但我也离开加入了其他实体,以前也是这样。

          @Query(SELECT NEW com.package.forms.Form(room.group,room.cUser,room.pUser,room.id) FROM Room room 
      LEFT JOIN room.group group LEFT JOIN room.cUser cuser LEFT JOIN room.pUser puser WHERE room.id = :id)
      

      然后改成这个。

          @Query(SELECT NEW com.package.forms.Form(room.group,room.cUser,room.pUser,room.id) FROM Room room 
           LEFT JOIN room.cUser cuser LEFT JOIN room.pUser puser 
      LEFT JOIN room.group groupWHERE room.id = :id)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-03-29
        • 2010-12-03
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多