В случае, если доступ в Спецификации получить доступ к внутреннему полю объекта 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