@OneToOne с обратным внешним ключом в другой таблице - PullRequest
0 голосов
/ 03 июня 2019

Как получить объект из другой таблицы, если внешний ключ есть только в другой таблице?

У меня есть следующие объекты:

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 / :?]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...