Hibernate @ManyToMany多个实体

时间:2014-06-09 13:31:48

标签: java hibernate jpa

我有以下情况: 基础域类:

@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。 但是,我想问一下,如果有某种最佳做法可以解决这种情况。

1 个答案:

答案 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;
  1. printer_mails_logo是数据库中的附加关联表。
  2. @JoinColumn(name='x')是关联表中列的实际名称。
  3. 这适合我。我可以毫无问题地获取已经打印过的所有徽标。