Hibernate instertable = false, Updatable = false ведущие нулевые ключи при использовании более одного составного внешнего ключа - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть этот класс, представляющий сущность с владельцем, которая может быть пересечением или агентом (агент также принадлежит пересечению).

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class OwnedTemporalEntity extends TemporalEntity {    
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "intersection_id", referencedColumnName = "id", insertable = false, updatable = false)
    private Intersection intersection = null;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumns({
            @JoinColumn(name = "intersection_id", referencedColumnName = "intersectionId"),
            @JoinColumn(name = "agent_id", referencedColumnName = "id")
    })
    private Agent agent = null;    
}

Если я создаю OwnedTemporalEntity с агентомseted и null Intersection, все работает нормально, столбцы intersection_id и agent_id определены с соответствующим идентификатором.

Но, если я создаю OwnedTempoeralEntity с выбранным пересечением и нулевым агентом, и agent_id, и intersection_id сохраняются в таблице как нулевые, когда только agent_id должен быть нулевым.

Что не так с моей структурой?

OBS 1: Если я изменяю «вставляемый = ложный, обнуляемый = ложный» на присоединения Агента, происходит обратное.В этом случае, если я устанавливаю пересечение, работает нормально, но если я устанавливаю агента, и agent_id, и intersection_id сохраняются как нулевые.Если я добавлю «inserttable = false, nulable = false» для обоих объединений, в любом случае и agent_id, и intersection_id сохраняются как null.

OBS 2: TemporalEntity - это сущность с автоматически генерируемым полем идентификатора и отметкой времени.

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