需要帮助来弄清楚如何为这些实体bean建模。要求是:将标签关联到master1和master2表(类似于我们分配给SO中的问题的标签)。
由于我将来会有很多主表,因此我为带有master_type
列的标签创建了一个表,如果标记与master1中的行相关,我将存储1,2如果标记与master2中的行相关联,依此类推。
我的问题是我不知道如何在Tag实体中声明这种关联(下面的代码)。我有很多@JoinColumn
个,每个主人一个,但这似乎不对。有什么想法吗?
@Entity
@Table (name="tags")
public class TagEntity {
/*
* Assign an id to the entry
*/
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
/*
* This id identifies the tag that is associated to the master table
*/
@Column(name="tag_id")
private Intger tagId;
/*
* This id identifies the master table
*/
@Column(name="master_id")
private Integer master_Id;
/*
* This id identifies the type of master table
*/
@Column(name="master_type")
private Integer master_type;
@JoinColumn(name = "master1_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Master1Entity master1;
@JoinColumn(name = "master2_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Master2Entity master2;
// getters and setters
}
答案 0 :(得分:0)
首先,你为什么使用@ManyToOne?据我所知,一个标签可以与许多表相关。 所以你需要的是在每个主实体中都有一个外键。为了以一种很好的方式实现这一点,你可以使用像这样的@MappedSuperclass:
@MappedSuperclass
public class Master{
@ManyToOne
@JoinColumn(name="tag")
protected TagEntity tag;
... // other shared fileds
}
然后像这样声明每个Master类:
@Entity
public Master1 extends Master{
... //fields reserved only for entity master1
}
您可以通过放入TagEntity @OneToMany(引用Master类)来存储特定标签所属的母版列表,但这不是强制性的,取决于您的需要。