如何在crudRepository中创建方法以使用列表ID查找任何元素?

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

在Spring + jpa + jpa Crud存储库+ hibernate-envers上有应用程序

所以,我有一个表UserRecord与任何字段

        Table UserRecord
id   name  surname  age version

       Table UserRecord_AUD
id   name  surname  age version REV REVINFO

因此,当我添加新用户时,它会写入UserRecord表。如果我改变年龄并尝试编写,则新版本的用户会写入UserRecord,而旧版本的用户会移动到具有相同ID的UserRecord_AUD表中。

所有保存的entoties在UserRecord_AUD中都有自己的记录

我的任务是通过ID列表从UserRecord_AUD获取所有实体。

===============================
    Table UserRecord
  11-1  Ivan      Ivanov  23 2
  22-2  Natasha   Ivanova 22 1
===============================
    Table UsersRecord_AUD
  11-1  Ivan      Ivanov  9  0
  11-1  Ivan      Ivanov  9  1
  22-2  Natasha   Ivanova 22 0
===============================

我有存储库:

@Repository
public interface UserRepository extends CrudRepository<UserRecord, String> 
{}

我需要自定义方法,可以通过id -list从表UserRecord_AUD中找到所有用户

而是随时打电话

repository.find(id);

我需要打电话

repository.find(ids);

如何做到:

我试过了:

@Query(value = "select id, name, surname, age, REV as VERSION, IDCALC from USERRECORD_AUD where PR_KEY in (:ids)", nativeQuery = true)
List<UserRecord> findHistoryByIds(List<String> ids);

但是有例外

参数绑定的名称不能为null或为空!在JDK <8上,您需要在JDK 8或更高版本上使用@Param作为命名参数,请务必使用-parameters进行编译。嵌套异常是java.lang.IllegalArgumentException:参数绑定的名称不能为null或为空!在JDK <8上,您需要在JDK 8或更高版本上使用@Param作为命名参数,请务必使用-parameters进行编译。

我的JPA实体是

@Entity
@Audited
@Table(name = "UserRecord")
@NoArgsConstructor(access = AccessLevel.PUBLIC)
@AllArgsConstructor
@Getter
@Setter
@Access(AccessType.FIELD)
public class UserRecord {
    @Id
    @GeneratedValue(generator = "uuid")
    @GenericGenerator(name = "uuid", strategy = "uuid2")
    @Column(name = "id")
    private String id;

    @Column(name = "name", length = 100, unique = false)
    private String name;

    @Column(name = "surname", length = 100, nullable = false)
    private String surname;


    @Column(name = "age", length = 100, nullable = false)
    private String age;

    @Version
    private int version;
sql spring jpa hibernate-envers
1个回答
1
投票

如果是索引参数,请使用索引

@Query(value = "select id, name, surname, age, REV as VERSION, IDCALC from USERRECORD_AUD where PR_KEY in (?1)", nativeQuery = true)
List<RiskMetricRecord> findHistoryByIds(List<String> ids);

如果是命名参数,请使用@Param

@Query(value = "select id, name, surname, age, REV as VERSION, IDCALC from USERRECORD_AUD where PR_KEY in :ids", nativeQuery = true)
List<RiskMetricRecord> findHistoryByIds(@Param("ids") List<String> ids);
© www.soinside.com 2019 - 2024. All rights reserved.