JPA LEFT JOIN 没有条件就不能工作

问题描述 投票:0回答:0

我有两个表:“用户”和“位置”。用户有零个、一个或多个位置。 Locations 表外键是相同的 userId。

table USERS(
  userId VARCHAR,
  name VARCHAR,
  capacity SMALLINT
)
table LOCATIONS(
  userId VARCHAR,
  city VARCHAR
)

这些是我的实体:

@Entity
@Table(name = "USERS")
public class User {
  @Id
  @Column(name ="userId")
  private String id;
  ...
  @OneToMany
  @JoinClolumn(name = "userId")
  private Location location;
}
@Entity
@Table(name = "LOCATIONS")
public class Location {
  @Id
  @Column(name ="userId")
  private String id;
  ...
}

资料库

@Repository
public interface UserRespository extends JpaRepository<User, String> {
  
  @Query("SELECT user FROM User user LEFT JOIN user.location WHERE user.id = :id")
  public Collection<User> findById(@Param("id") String id)
  ...
  
  a) @Query("SELECT user FROM User user LEFT JOIN user.location  WHERE user.name LIKE CONCAT(:name, '%')")
  b) @Query("SELECT user FROM User user LEFT JOIN user.location")
  c) @Query("SELECT user FROM User user LEFT JOIN user.location WHERE user.capacity = :capacity")
}
  • “findById”方法工作正常,返回用户和位置(如果有),如果没有位置则仅返回用户。
  • 查询“a”工作正常,返回与名称参数匹配的用户,有或没有位置。
  • 查询“b”(无条件)失败,我想要一个包含或不包含其位置的所有用户的列表。
  • 查询“c”失败的方式与“b”相同。

我错过了什么? 任何帮助将不胜感激

spring-boot hibernate jpa jpql
© www.soinside.com 2019 - 2024. All rights reserved.