Я не уверен, как @Inheritance решает, какой столбец использовать для соединения, но я предполагаю, что по умолчанию он использует первичные ключи.
Это правильно, и это объясняется в следующем разделе спецификации JPA 1.0
9.1.32 PrimaryKeyJoinColumn Annotation
Аннотация PrimaryKeyJoinColumn
указывает столбец первичного ключа, который
используется в качестве внешнего ключа для присоединения к
другой стол.
Примечание к PrimaryKeyJoinColumn:
используется для присоединения к основной таблице
подкласс сущности в сопоставлении JOINED
стратегия к основной таблице его
суперкласс; он используется в
SecondaryTable
аннотация для присоединения к
дополнительная таблица к основной таблице;
и это может быть использовано в OneToOne
отображение, в котором первичный ключ
ссылающийся объект используется как
внешний ключ к указанному объекту.
...
Если нет PrimaryKeyJoinColumn
аннотация указана для подкласса
в стратегии отображения JOINED
,
столбцы внешнего ключа предполагаются
имеют те же имена, что и первичный ключ
столбцы первичной таблицы
суперкласс.
...
А вышеприведенная аннотация (или PrimaryKeyJoinColumns
при использовании составных ключей) дает некоторый контроль над именем столбца первичного ключа текущей таблицы и именем столбца первичного ключа таблицы, присоединяемой к .
Я бы хотел объединить их не с одним столбцом, кроме первичного ключа, а с двумя, в данном случае с column1 и column2.
Я не уверен, что это сработает, но я бы попробовал следующее (в подклассе):
@Entity
@Table(name="bar")
@PrimaryKeyJoinColumns({
@PrimaryKeyJoinColumn(name="column1",
referencedColumnName="column1"),
@PrimaryKeyJoinColumn(name="column2",
referencedColumnName="column2")
})
public class Bar extends Foo {
@Id
private Integer uniqueBarId;
@Column(name="column1")
private String column1;
@Column(name="column2")
private String column2;
@Column(name="someOtherValue")
private String someOtherValue;
}
Интересно, будет ли провайдер JPA жаловаться или нет.
Ссылки
- JPA 1.0 Спецификация
- Раздел 9.1.32 «Аннотация PrimaryKeyJoinColumn»
- Раздел 9.1.33 «Аннотация PrimaryKeyJoinColumns»