2009-06-22 83 views
0

我有一個傳統的對象模型,它具有內容對象和一個表,旨在表示內容對象之間的關係。後者稱爲content_content_connections表,除了具有from和to的主鍵以外,還包含3個其他字段。連接類型字段和內容類型的內容類型標識字段。所以在內容cbjects特定類型的連接可能被標註爲如何使用hibernate攔截器來填充連接表中的額外字段?

@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "content_content_connections", joinColumns = { @JoinColumn(name = "CONTENT_ID1") }, inverseJoinColumns = { @JoinColumn(name = "CONTENT_ID2") }) 
@WhereJoinTable(clause = "connection_type_id=1108") 
getFoos() { ... } 

目前,這是從where子句忽略額外的列,除了一個只讀映射。如果我希望將其更改爲讀/寫映射,是否有辦法在不將映射類型提升爲映射類型的情況下執行此操作?換句話說,我可以使用hibernate攔截器來保存連接表中未明確映射的附加列嗎?

回答

0

你最好實施一個SaveOrUpdateEventListener,而不是攔截器。

一定要添加的SaveOrUpdateEventListener這樣:

private void initSaveOrUpdateEventListenerHook(Configuration config) { 
    List<SaveOrUpdateEventListener> l = new ArrayList<SaveOrUpdateEventListener>(); 
    SaveOrUpdateEventListener[] listeners = 
      config.getEventListeners().getSaveOrUpdateEventListeners(); 
    l.add(new SaveOrUpdateEventListenerHook()); 
    l.addAll(Arrays.asList(listeners)); 
    SaveOrUpdateEventListener[] newListeners = l.toArray(new SaveOrUpdateEventListener[l.size()]); 
    config.getEventListeners().setSaveOrUpdateEventListeners(newListeners); 
}