关联映射-双向关联

单向Set-based关联的代码基础上做的双向关联。

首先往Event类里添加参与者集合:

private Set participants = new HashSet();

    public Set getParticipants() {
        return participants;
    }

    public void setParticipants(Set participants) {
        this.participants = participants;
    }
往Event.hbm.xml加入以下代码:

<set name="participants" table="PERSON_EVENT" inverse="true">
            <key column="EVENT_ID"/>
            <many-to-many column="PERSON_ID" class="Person"/>
        </set>

inverse="true";inverse倒转,倒向;有点生涩,可以理解为是否放弃维护participants的关联关系。

如何维护双向关联?

在person端设置event集合的引用,在event端设置person集合的引用。

很多开发者也谨慎编写和创建连接管理方法来正确设置双向关联:

protected Set getEvents() {
        return events;
    }

    protected void setEvents(Set events) {
        this.events = events;
    }

    public void addToEvent(Event event) {
        this.getEvents().add(event);
        event.getParticipants().add(this);
    }

    public void removeFromEvent(Event event) {
        this.getEvents().remove(event);
        event.getParticipants().remove(this);
    }
get和set的访问修饰符为protected。是的同一个包和子类能够访问这些方法。在Event端也做类似修改。

原则:所有双向关联需要有一方为inverse,在one-to-many关系中应有由多的一方维护关联关系,在many-to-many中可为任意一方。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值