如何使用hibernate拦截器来填充连接表中的额外字段?

问题描述:

我有一个传统的对象模型,它具有内容对象和一个表,旨在表示内容对象之间的关系。后者称为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拦截器来保存连接表中未明确映射的附加列吗?

你最好实施一个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); 
}