【问题标题】:How to use hibernate interceptors to populate extra fields in a join table?如何使用休眠拦截器填充连接表中的额外字段?
【发布时间】:2009-06-22 22:56:48
【问题描述】:

我有一个遗留对象模型,它具有 content 对象和一个旨在表达 content 对象之间关系的表。后者称为 content_content_connections 表,除了具有 from 和 to 内容的主键外,还包含其他 3 个字段。连接类型字段和内容类型 ID 字段用于 from 和 to 内容。因此,在内容 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 子句之外的额外列。如果我希望将其更改为读/写映射,有没有办法在不将连接表提升为映射类型的情况下这样做?换句话说,我可以使用休眠拦截器在保存时填充连接表中未显式映射的附加列吗?

【问题讨论】:

    标签: java hibernate orm


    【解决方案1】:

    最好实现 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);
    }
    

    【讨论】:

      猜你喜欢
      • 2016-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-27
      相关资源
      最近更新 更多