У меня двунаправленное отношение «один ко многим» между EntityA и EntityB. Отношение не основано на внешнем ключе, вместо этого сущности должны быть связаны с уникальным linking_field
в базе данных. Соответствующие отображения:
EntityA:
@Id
private Long id;
@OneToMany(mappedBy = "entityA")
private Set<EntityB> children = new HashSet<>();
@Column(name = "linking_field")
private String linkingField;
EntityB:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "entity_a_id", referencedColumnName = "linking_field", nullable = false)
private EntityA entityA;
Теперь давайте представим ситуацию, когда таблица EntityB пуста. Проблема заключается в том, что когда я пытаюсь получить entityA, значение которого null
в столбце linking_field
, с помощью метода репозитория Spring Data, который явно указывает поле JOIN FETCH
es children
, поле children
инициализируется с помощью null
, Однако, это не тот случай, когда установлен linking_field
- тогда Hibernate назначает пустой PersistentSet
для children
, что является желательным для меня поведением. Можно ли это как-то преодолеть?
У EntityA есть linkingField == null
:
EntityA entityA = entityARepository.findByIdWithChildren(entityAId);
entityA.getChildren(); // null
У EntityA есть linkingField != null
:
EntityA entityA = entityARepository.findByIdWithChildren(entityAId);
entityA.getChildren(); // empty Set -> desirable
Заранее спасибо.