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;