【问题标题】:Spring Data JPA native @Query with whole entity as named @ParamSpring Data JPA 原生 @Query,整个实体名为 @Param
【发布时间】:2020-01-03 06:06:11
【问题描述】:

假设我有两个实体:

class User {
  @Id private int id;
  private String name;
  private int addressId;
}

class Address {
  @Id private int id;
  private String street;
}

是否可以这样做:

interface UserRepository extends CrudRepository<User, Integer> {
  @Query(nativeQuery=true,
    value=
      "select * from user "
    + "inner join address a on a.id = u.addressId "
    + "where a.street = :address.street")
  List<User> findByAddress(@Param("address") Address address);
}

即:接受一个实体(本例中为Address)作为参数,但在本机查询中引用其属性之一(本例中为Address.street)?

由于各种原因,我不能对这两个实体使用“正常”@ManyToMany 和 JPA 查询。

【问题讨论】:

    标签: java spring spring-data-jpa spring-data


    【解决方案1】:

    在这里找到答案:

    https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions

    这个可以用:

    + "where a.street = :#{#address.street}")
    

    奖励 - 对于a.street in(...),使用集合预测:

    https://docs.spring.io/spring/docs/4.3.10.RELEASE/spring-framework-reference/html/expressions.html#expressions-collection-projection

    即:

    + "where a.street in(:#{#address.![street]})")
    

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 1970-01-01
      • 2021-02-13
      • 2016-10-10
      • 1970-01-01
      • 1970-01-01
      • 2017-06-23
      • 2017-03-29
      • 2015-06-09
      相关资源
      最近更新 更多