Как получить объект из другой таблицы, если внешний ключ есть только в другой таблице?
У меня есть следующие объекты:
public class ViolationFactor extends BaseEntity {
@Column(name = "czynnik")
private String factor;
@Column(name = "stopien")
private float degree;
@JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
// @JsonBackReference
@OneToOne(mappedBy = "violationFactor", cascade = CascadeType.ALL, fetch = FetchType.LAZY, optional = false)
private IncidentAssessmentFactor incidentAssessmentFactor;
}
public class IncidentAssessmentFactor extends BaseEntity {
@Column(name="komentarz")
private String comment;
@Column(name="czynnik_wybrany")
private Boolean factorIsSelected;
@Column(name = "wartosc_wybrana")
private float value;
// @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="ocena_naruszenia_wynik_id", updatable=false, insertable=false)
private IncidentAssessment incidentAssessment;
// @JsonIdentityInfo(generator = ObjectIdGenerators.PropertyGenerator.class, property = "id")
// @JsonManagedReference
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "czynnik_naruszen_id", unique = true)
private ViolationFactor violationFactor;
}
Таблица ViolationFactor не имеет ни одногоВнешний ключ к IncidentAssessmentFactor - это просто словарь.IncidentAssessmentFactor имеет внешнее значение для ViolationFactor.
Как удалить свойство IncidentAssessmentFactor из IncidentAssessmentFactor?Я хотел бы иметь только одну однонаправленную привязку @OneToOne.Теперь у меня есть круговая зависимость: ViolationFactor -> IncidentAssessmentFactor -> ViolationFactor, и когда выполняется сопоставление с DTO, я получаю ошибку переполнения стека:
Есть ли возможность иметь свойство IncidentAssessmentFactor инцидентное свойство AssessmentFactor;ТОЛЬКО в объекте ViolationFactor?
Мой репозиторий:
public interface ViolationCriterionRepository extends JpaRepository<ViolationCriterion, Long> {
@Query("select vc from ViolationCriterion vc join vc.violationFactors vf join vf.incidentAssessmentFactor iaf join iaf.incidentAssessment ia where ia.incidentAssessmentId = ?1 group by vc ")
List<ViolationCriterion> findIncidentAssessmentByIncidentAssessmentId(Long incidentId);
}
java.lang.StackOverflowError: пусто в org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoizer.java: 84) ~ [hibernate-core-5.2.16.Final.jar: 5.2.16.Final] на pl.ultimo.web.odo.ODOBackend.incidents.entities.IncidentAssessment _ $$ _ jvst6f1_32.getIncidentAssessmentId (IncidentAssessment _ $$ _ jvst6f1.java) ~ [classes / :?] в pl.ultimo.web.odo.ODOBackend.incidents.mapper.ViolationCriterionMapperImpl.incidentAssessmentToIncidentAssessmentDto (ViolationCriterionMapperImpl.java:150) ~ [classes / :mo.web в pl..ODOBackend.incidents.mapper.ViolationCriterionMapperImpl.incidentAssessmentFactorToIncidentAssessmentFactorDto (ViolationCriterionMapperImpl.java:169) ~ [classes / :?]