如何使用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);
}