Java 休眠@manytomple多个实体
我有以下情况: 基本域类:Java 休眠@manytomple多个实体,java,hibernate,jpa,Java,Hibernate,Jpa,我有以下情况: 基本域类: @MappedSuperclass public class BaseDomain { @Id protected UUID id; } 媒体对象类: @Entity public class MediaObject extends BaseDomain { @ManyToMany @JoinTable( joinColumns = { @JoinColumn(na
@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;
}
@实体
公共类MediaObject扩展了BaseDomain{
@许多
@可接合(
joinColumns={
@JoinColumn(name=“BaseDomain\u id”,referencedColumnName=“id”
}
反向连接列={
@JoinColumn(name=“Media\u id”,referencedColumnName=“id”)
}
私人名单持有人;
}
“持有人”A:
@实体
公共类A扩展了BaseDomain{
@许多
私人名单媒体;
}
“持有人”B:
@实体
公共类B扩展了BaseDomain{
@许多
私人名单媒体;
}
我想要实现的是,存储一个MediaObject,多个实体可能“持有”这个对象。我的方法是使用一个连接表来存储MediaObject和任意BaseDomain对象之间的关系(如上所述)。我面临的问题是持久性提供程序(在我的例子中是Hibernate)无法决定要联接的实际表。
我正在考虑使用一个单向@OneToMany,这在JPA2.1中是可能的。
但是,我想问,是否有某种最佳实践可以解决这种情况。下面的代码片段是我在生产环境中使用的,它为Hibernate实现了
manytomy
关联映射
@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;
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name=“printed\u mails\u logo”,
joinColumns={
@JoinColumn(name=“mails\u id”,nullable=false,updateable=false)
},
反向连接列={
@JoinColumn(name=“logo\u id”,nullable=false,updateable=false)})
私人设置打印徽标;
printer\u mails\u logo
是数据库中的附加关联表@JoinColumn(name='x')
是关联表中列的实际名称@Entity
public class B extends BaseDomain {
@ManyToMany
private List<MediaObject> media;
}
@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;