将对象字段而不是单个参数传递给自定义存储库SQL查询

时间:2020-09-06 23:29:59

标签: java spring-data spring-data-jdbc

是否可以将对象传递给自定义存储库查询,并且可以将对象的字段用作SQL内部的参数?我发现的所有示例都将所有参数都列为方法参数。

我正在尝试将upsert逻辑实现为CrudRepository上的自定义查询。我想将Person对象传递给该方法,并使用一些业务标识符来检测冲突和更新,例如:

class Person {
  private Integer id;
  private String name;
  private String email;
  // getters & setters removed for brevity
}

不幸的是,由于无法解析参数nameemail,此操作失败了:

@Repository
public interface PersonRepository extends CrudRepository<Person, Integer> {
  @Query(value =
          "INSERT INTO person (name, email)" +
          "VALUES (:name, :email)" +
          "ON CONFLICT (email) DO UPDATE")
  Person upsertOnEmail(Person p);
}

对我来说,一种解决方法是使用findFirstByEmail之类的东西,更新该对象并将其存储(全部存储在事务中),但是更新似乎更有效。

0 个答案:

没有答案