Hibernate关系映射多对多

多对多:

单向注解:

	@ManyToMany(cascade={javax.persistence.CascadeType.ALL})
	@JoinTable(name="teacher_student",
		joinColumns=@JoinColumn(name="tid"),
		inverseJoinColumns=@JoinColumn(name="sid"))
	public Set<Student> getStudents() {
		return students;
	}

单向XML:

	<class name="Person">
		<id name="id" column="personId">
			<generator class="native" />
		</id>
	</class>

	<class name="Address">
		<id name="id" column="addressId">
			<generator class="native" />
		</id>
		<set name="persons" table="PersonAddress">
			<key column="addressId" />
			<many-to-many column="personId" class="Person" />
		</set>
	</class>

create table Person ( personId bigint not null primary key )
create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )
create table Address ( addressId bigint not null primary key )

注解双向:

	@ManyToMany(cascade={javax.persistence.CascadeType.ALL})
	@JoinTable(name="teacher_student",
		joinColumns=@JoinColumn(name="tid"),
		inverseJoinColumns=@JoinColumn(name="sid"))
	public Set<Student> getStudents() {
		return students;
	}

	@ManyToMany(mappedBy="students")
	public Set<Teacher> getTeachers() {
		return teachers;
	}

XML双向:

<class name="Person">
    <id name="id" column="personId">
        <generator class="native"/>
    </id>
    <set name="addresses" table="PersonAddress">
        <key column="personId"/>
        <many-to-many column="addressId"
            class="Address"/>
    </set>
</class>

<class name="Address">
    <id name="id" column="addressId">
        <generator class="native"/>
    </id>
    <set name="people" inverse="true" table="PersonAddress">
        <key column="addressId"/>
        <many-to-many column="personId"
            class="Person"/>
    </set>
</class>

create table Person ( personId bigint not null primary key )
create table PersonAddress ( personId bigint not null, addressId bigint not null, primary key (personId, addressId) )
create table Address ( addressId bigint not null primary key )


ps.若不添加事务,或者开始了事务但是没有commit,会使得中间表没有数据。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值