Как создать сущность с двумя составными внешними ключами, чтобы одно или несколько ключевых полей имели общее значение? - PullRequest
0 голосов
/ 21 февраля 2019

КРАТКИЙ ВОПРОС

Как создать сущность с двумя или более составными внешними ключами, чтобы одно или несколько полей имели общее значение без лишних столбцов?



ОБЪЯСНЕНИЕ

У меня есть две сущности A и B . A имеет простое поле идентификатора, а B имеет составной идентификатор с простым последовательным идентификатором и идентификатором A .

@Entity
public class A { 
    @Id       
    public long id;
}
@Entity
@IdClass(B.PrimaryKey.class)
public class B {
    @Id @GeneratedValue
    public long id;

    @Id // Must be the raw id of A, not relational mapping
    public long aId;

    public static class PrimaryKey {
        public long id;
        public long aId;
    }
}

И есть сущность OwnedValue , которая представляет собой простое значение, представляющее статистическое значение A или B .

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class OwnedValue {
    @Id @GeneratedValue
    public long id;

    @ManyToOne(fetch = FetchType.EAGER)
    @JoinColumn(name = "a_id", referencedColumnName = "id", insertable = false, updatable = false)
    public A a; // if a is not null, b should be null

    @ManyToOne(fetch = FetchType.EAGER)
        @JoinColumns({
            @JoinColumn(name = "a_id", referencedColumnName = "aId", insertable = false, updatable = false),
            @JoinColumn(name = "b_id", referencedColumnName = "id", insertable = false, updatable = false)
    })
    public B b; // if b is not null, a should be null

    public String meaning;

    public double value;
}

В этом случае таблица OwnedValue имеет следующие столбцы: id, a_id, b_id, значение, значение.Проблема заключается в том, что при использовании этого кода, когда я вставляю новое OwnedValue, и a_id, и b_id остаются нулевыми.

Если я удаляю аннотации объединения, все работает нормально, но в таблице OwnedValue теперь есть избыточный столбец: id, a_id, a_b_id , b_id , meaing, value,

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