Есть приложение на 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, а старая версия пользователя перемещается в таблицу UserRecord_AUD с тем же идентификатором.
все сохраненные объекты имеют собственные записи в UserRecord_AUD
Моя задача - получить все объекты из 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>
{}
Мне нужен пользовательский метод, который может найти всех пользователей из таблицы UserRecord_AUD по id -list
вместо звоните в любое время
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);
Но есть исключение
Имя для привязки параметра не должно быть нулевым или пустым! На JDK <8 вы
нужно использовать @Param для именованных параметров, на JDK 8 или лучше, обязательно
компилировать с -параметрами .; вложенное исключение
java.lang.IllegalArgumentException: имя для привязки параметра должно
не быть нулевым или пустым! В JDK <8 вам нужно использовать @Param для named
параметры, на JDK 8 или лучше, обязательно скомпилируйте с -parameters. </p>
Моя сущность 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;