I have migrated to spring v2.1.2.RELEASE and using hibernate version 5.3.7.FINAL
We have @OneToOne bi directional relationship between entity as follows
class Parent{
@OneToOne(fetch = FetchType.LAZY, mappedBy = "parent", optional = false)
@NotAudited
private Child child;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
}
class Child{
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "parent_id")
@MapsId
@NotNull
private Parent parent;
@Id
@Column(name = "indent_id", insertable = false, updatable = false)
private Integer parentId;
}
calling
parentRepository.findByIdIn(Collections.singletonList(1));
makes db call as: Hibernate:
select parent0_.id as id1_19_ from parent parent0_ where parent0_.id in (?)
Which is working fine, now consider use case,
public class Filter implements Specification<Parent> {
@Override
public Predicate toPredicate(Root<Indent> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder) {
// TODO Auto-generated method stub
List<Integer> parentIdList = new ArrayList<>();
parentIdList.add(1);
ArrayList<Predicate> predicates = new ArrayList<>();
predicates.add(root.get("id").in(parentIdList));
return predicates.size() == 0 ? null
: criteriaBuilder.and(predicates.toArray(new Predicate[predicates.size()]));
}
}
PageRequest pageRequest = PageRequest.of(page - 1, pageSize, Sort.Direction.DESC, "id");
Filter filter = new Filter();
Page<Indent> indentPage = indentRepository.findAll(filter, pageRequest);
makes DB call to Child entity as well
Hibernate:
select parent0_.id as id1_19_ from parent parent0_ where parent0_.id in (?)
select child0_.parent_id as parent_i1_29_ from child child0_ where child0_.indent_id in (?)
Is there any way to avoid Db call to child entity here?