JPA Отношения один-ко-многим с составным идентификатором у отца и ребенка - PullRequest
0 голосов
/ 07 мая 2018

Таблицы:

FATHER_TABLE (PK CONF_ID, CONF_TYPE)
CONF_ID (NUMBER(2)),
CONF_TYPE(VARCHAR2(10),
... some other ininfluent columns

CHILD TABLE (PK CONF_ID, CONF_TYPE, CONF_DETAIL)
CONF_ID (NUMBER(2)),
CONF_TYPE(VARCHAR2(10),
CONF_DETAIL(NUMBER(2)),
... some other ininfluent columns

Сущность таблицы отца определяется как:

public class FatherId implements Serializable {   
    private static final long serialVersionUID = 1L;
    private Long confId;
    private String confType;

    //equals and hashcode
}


@Entity
@IdClass(FatherId.class)
@Table(name = "FATHER_TABLE")
public class Father {
    @Id
    @Column(name = "CONF_ID")
    private Long confId;

    @Id
    @Column(name = "CONF_TYPE")
    private String confType;

    @OneToMany(mappedBy="father", fetch=FetchType.EAGER)
    private Set<Child> = new HashSet<Child>
}

Как я могу сослаться на FatherId в моем гипотетическом ChildId IdClass или непосредственно в Child классе сущностей?

1 Ответ

0 голосов
/ 08 мая 2018

Это «производная личность», и вы можете отобразить Child следующим образом:

public class ChildId implements Serializable {
    private Long confDetail; // matches the name of the attribute
    private FatherId father;  // matches name of attribute and type of Father PK
    ...
}


@Entity
@IdClass(ChildId.class)
@Table(name = "CHILD_TABLE")
public class Father {
    @Id
    @Column(name = "CONF_DETAIL")
    private Long confDetail;

    @Id
    @JoinColumns({
        @JoinColumn(name="CONF_ID", referencedColumnName="CONF_ID"),
        @JoinColumn(name="CONF_TYPE", referencedColumnName="CONF_TYPE")
    })
    @ManyToOne
    Father father;
}

Производные идентификаторы обсуждаются (с примерами) в спецификации JPA 2.1 в разделе 2.4.1.

...