2014-06-09 199 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')是關聯表中列的實際名稱。

這對我很好。我可以在沒有任何問題的情況下獲取已經打印的所有徽標。