如何使用JPA处理多个父类型?

时间:2015-04-01 15:43:51

标签: java mysql jpa

我继承了一个系统,它有几个表格,如下所示:

CREATE TABLE Notes (
    id INT PRIMARY KEY,
    note TEXT,
    parent_id INT,
    parent_type VARCHAR
);

基本上,我的想法是你可以有其他几种类型,比如“Tickets”和“Widgets”,如果你想为票123添加一个注释,你可以这样做:

INSERT INTO Notes (note, parent_id, parent_type)
    VALUES ('blah blah', 123, 'ticket');

是否有任何明智的方法让JPA创建@OneToMany关系,例如,使用此架构的票证到票据?

或者我是否需要将Notes表拆分为单独的Ticket_Notes,Widgets_notes等表?

是否可以使用@DiscriminatorColumn在Java中创建单独的TicketNotes,WidgetNotes等实体?

1 个答案:

答案 0 :(得分:1)

似乎利用鉴别器和继承可以得到我想要的东西。

例如:

@Entity
class Ticket {
    @Id
    private Integer id;

    // ...

    @OneToMany(mappedBy="ticket", fetch=FetchType.LAZY)
    private List<TicketNotes> notes;
}


@Entity
@Inheritence
@DiscriminatorColumn(name="PARENT_TYPE")
public abstract class Note {
    @Id
    private Integer id;

    // ...
}

@Entity
@DiscriminatorValue("ticket")
public class TicketNote extends Note {
    @ManyToOne
    @JoinColumn(name="PARENT_ID")
    private Ticket ticket;
}

有用的参考:http://en.wikibooks.org/wiki/Java_Persistence/Inheritance