java - Spring Data JPA 原生 @Query,整个实体名为 @Param
问题描述
假设我有两个实体:
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 查询。
解决方案
在这里找到了答案:
https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions
这可以用来:
+ "where a.street = :#{#address.street}")
Bonus - for a.street in(...)
,使用集合预测:
那是:
+ "where a.street in(:#{#address.![street]})")
推荐阅读
- c# - 在 IdentityServer4 中实现 Cookie 授权流程
- javascript - 您的 GraphQL 查询中出现错误:无法在类型“StrapiPropiedadesImagen”上查询字段“childImageSharp”
- javascript - 如何将字符串从 LocalStorage 转换为 int /float
- java - 将 JsonArray 传递给 writeValueAsString 时,ObjectMapper 抛出异常
- ios - IOS In App 购买不可用产品
- javascript - 我如何将数据库数组值从 PHP 传递到 ajax 以及从 ajax 传递到 PHP(使用 ajax post 方法)
- python - 尝试提交视图并收到 405 错误
- swift - Swift 中的共享数据模型
- flutter - 云消息主题订阅是否持续存在?
- php - 我在数组中有数据,必须在 Laravel 刀片模板中显示,但在尝试获取名称时显示错误