2014-06-09 203 views
0

我有以下情形: 基本域类:休眠@ManyToMany多个实体

@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; 

} 

“持有人” 答:

@Entity 
public class A extends BaseDomain { 

    @ManyToMany 
    private List<MediaObject> media; 
} 

“ Holder“B:

@Entity 
public class B extends BaseDomain { 

    @ManyToMany 
    private List<MediaObject>  media; 
} 

我想要存档的是存储MediaObject,并且多个实体可以“持有”此对象。我的方法是使用JoinTable来存储MediaObject和任意BaseDomain对象之间的关系(如上所述)。我面临的问题是持久性提供者(在我的情况下是Hibernate)将无法决定哪个实际的表加入。 我正在考虑使用JPA 2.1中可能的单向@OneToMany。 但是,我想问一下,是否有某种最佳实践来处理这种情况。

回答

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是数据库additinal关联表。
  2. @JoinColumn(name='x')是关联表中列的实际名称。

这对我很好。我可以在没有任何问题的情况下获取已经打印的所有徽标。