我继承了一个系统,它有几个表格,如下所示:
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等实体?
答案 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