КРАТКИЙ ВОПРОС
Как создать сущность с двумя или более составными внешними ключами, чтобы одно или несколько полей имели общее значение без лишних столбцов?
ОБЪЯСНЕНИЕ
У меня есть две сущности 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,