2015-02-06 2 views
2

Как я могу смоделировать в hibernate O таблицы, первичный ключ также является внешним ключомИспользуйте PK, как FK в JPA/Hibernate

в этой схеме:

CREATE TABLE policies (
    policy_id   int, 
    date_issued  datetime, 

    -- // other common attributes ... 
); 

CREATE TABLE policy_motor (
    policy_id   int, 
    vehicle_reg_no varchar(20), 

    -- // other attributes specific to motor insurance ... 

    FOREIGN KEY (policy_id) REFERENCES policies (policy_id) 
); 

CREATE TABLE policy_property (
    policy_id   int, 
    property_address varchar(20), 

    -- // other attributes specific to property insurance ... 

    FOREIGN KEY (policy_id) REFERENCES policies (policy_id) 
); 
  1. Возможно ли это в hibernate mapping или лучше всего отделить и использовать новый ПК?
  2. , а также это Окей, если я использую автоматическое приращение на главном столе

ответ

2

Конечно, вы можете. Это полезно для один-к-одному ассоциаций, где вы можете иметь:

@Id 
@Column(name="policy_id") 
private policyId; 

@MapsId 
@OneToOne 
@JoinColumn(name = "policy_id") 
private Policy policy; 

Вы можете использовать автоинкрементируемые на главном столе, что означает, что вам нужно использовать IDENTITY генератор в JPA/Hibernate.

@MapsId позволяет использовать один и тот же столбец SQL с свойством идентификатора объекта. Он инструктирует Hibernate использовать этот столбец для разрешения ассоциации @OneToOne или @ManyToOne. Изменения должны всегда распространяться через свойство @Id, а не на одну сторону (которая игнорируется во время вставок/обновлений).

+0

Что означает '@ MapsId'? – Youssef

+0

Проверьте обновленный ответ. –

+0

спасибо, что это действительно помогает мне, потому что я использовал инструменты для спящего режима, и он генерирует мне дополнительную таблицу с помощью @Embeddable. – Youssef

Смежные вопросы