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

时间:2009-06-22 22:56:49

标签: java hibernate orm

我有一个遗留对象模型,其中包含内容对象和一个用于表示内容对象之间关系的表。后者称为content_content_connections表,除了具有from和to内容的主键外,还包含3个其他字段。 from和to内容的连接类型字段和内容类型id字段。因此在内容cbjects中,特定类型的连接可能被注释为

@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拦截器,在保存时,填充连接表中未显式映射的其他列吗?

1 个答案:

答案 0 :(得分: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);
}