хранилище DataTablesRepository findAll со спецификацией на поле объекта дает исключение - PullRequest
0 голосов
/ 24 марта 2020

В случае, если доступ в Спецификации получить доступ к внутреннему полю объекта root .get ("user"). Get ("id") имеют Exception Transaction silently rolled back because it has been marked as rollback-only

Entity

@Entity
@Getter
@Setter
@AllArgsConstructor
@IdClass(BaseIdClass.class)
public class CheckList {


    @Id
    @NotNull
    @GeneratedValue(strategy= GenerationType.SEQUENCE, generator="checkListGen")
    @SequenceGenerator(name = "checkListGen", sequenceName = "seq_check_list")
    private long id;

    @Id
    private long projectId;

    @JoinColumns(
            {
                    @JoinColumn(name = "fk_user_id")
            }
    )
    @ManyToOne(fetch = FetchType.LAZY)
    private Users user;

Репозиторий

@Repository
public interface CheckListReposDT extends DataTablesRepository<CheckList, BaseIdClass> {
}

запрос

 DataTablesOutput<CheckList> checkLists = checkListReposDT.findAll(input ,  new SpecCheckList(projectId, userId));

Спесификация, которая работает правильно

    @Override
    public Predicate toPredicate(Root<CheckList> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
        return builder.equal(root.get("projectId"), projectId);
    }

В этой спецификации ИСКЛЮЧЕНИЕ

    @Override
    public Predicate toPredicate(Root<CheckList> root, CriteriaQuery<?> query, CriteriaBuilder builder) {
        Predicate predicate = builder.equal(root.get("projectId"), projectId);

        if (userId > 0)
            predicate = builder.and(predicate, builder.equal(root.get("user").get("id"), userId));

        return predicate;
}

Исключение только если получить доступ к внутреннему полю объекта

org.springframework.transaction.UnexpectedRollbackException: Transaction silently rolled back because it has been marked as rollback-only
   spring-boot-starter-parent 2.1.8.RELEASE

............
      spring-boot-starter-data-jpa 
      spring-data-jpa-datatables 5.0.0 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...