У меня есть 2 сущности с составным PK, которые имеют один и тот же тип (в приведенном ниже примере это класс Shared ). Также у меня есть 1 сущность, которая создает связь между сущностями Foo и Bar. Вот пример:
@Entity
class Shared {
@Id private Long id;
}
@Entity
class Foo {
@EmbeddedId private FooPK id;
}
@Embeddable
class FooPK implements Serializable {
@ManyToOne
@JoinColumn(name="shared_id")
private Shared shared;
private Long fooId;
}
@Entity
class Bar {
@EmbeddedId private BarPK id;
}
@Embeddable
class BarPK implements Serializable {
@ManyToOne
@JoinColumn(name="shared_id")
private Shared shared;
private Long barId;
}
@Entity
class FooVsBar {
@EmbeddedId private FooVsBarPK id;
}
@Embeddable
class FooVsBarPK implements Serializable {
@ManyToOne
@JoinColumns({
@JoinColumn(name="id_shared_foo", referencedColumnName="shared_id"),
@JoinColumn(name="id_foo", referencedColumnName="foo_id"),
})
private Foo foo;
@ManyToOne
@JoinColumns({
@JoinColumn(name="id_shared_bar", referencedColumnName="shared_id"),
@JoinColumn(name="id_bar", referencedColumnName="bar_id"),
})
private Bar bar;
}
Таким образом, в таблице FooVsBar
есть 4 столбца (2 FK), но я бы хотел получить 3 столбца: id_foo
, id_bar
и id_shared
, так как Foo и Bar всегда будут связаны с то же самое Shared
. Поэтому нет смысла повторять id_shared
, оно всегда будет одинаковым.
UPDATE :
Вот как выглядит база данных UML. К сожалению, я не могу изменить таблицы, мне просто нужно сопоставить JPA с этой моделью.