我有以下情况: 基础域类:
@MappedSuperclass
public class BaseDomain {
@Id
protected UUID id;
}
媒体对象类:
@Entity
public class MediaObject extends BaseDomain {
@ManyToMany
@JoinTable(
joinColumns = {
@JoinColumn(name = "BaseDomain_id", referencedColumnName = "id"
}
inverseJoinColumns = {
@JoinColumn(name = "Media_id", referencedColumnName = "id")
}
private List<BaseDomain> holders;
}
&#34;持有人&#34;答:
@Entity
public class A extends BaseDomain {
@ManyToMany
private List<MediaObject> media;
}
&#34;持有人&#34; B:
@Entity
public class B extends BaseDomain {
@ManyToMany
private List<MediaObject> media;
}
我想要实现的目的是,存储一个MediaObject,多个实体可以“保持”#34;这个对象。我的方法是使用JoinTable来存储MediaObject和任意BaseDomain对象之间的关系(如上所述)。我面临的问题是持久性提供程序(在我的情况下是Hibernate)无法决定实际的表加入。 我想在JPA 2.1中使用单向的@OneToMany。 但是,我想问一下,如果有某种最佳做法可以解决这种情况。
答案 0 :(得分:0)
我在生产环境中使用了以下代码段,它为Hibernate实现了ManyToMany
联合映射。
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "printed_mails_logo",
joinColumns = {
@JoinColumn(name = "mails_id", nullable = false, updatable = false)
},
inverseJoinColumns = {
@JoinColumn(name = "logo_id", nullable = false, updatable = false) })
private Set<Logo> printedLogos;
printer_mails_logo
是数据库中的附加关联表。@JoinColumn(name='x')
是关联表中列的实际名称。这适合我。我可以毫无问题地获取已经打印过的所有徽标。