mysql外键双向关联_Hibernate 一对多外键双向关联

Hibernate一对多外键双向关联

一、模型介绍

一个人(Person)对应多个地址(Address)。

二、实体(省略getter、setter方法)

public class Person1nfk_sx implements Serializable {

private int personid;

private String name;

private int age;

private Set addresses=new HashSet();

public class Address1nfk_sx implements Serializable {

private int addressid;

private String addressdetail;

private Person1nfk_sx person1nfkSx;

三、表模型

mysql> desc person_1nfk_sx;

+----------+--------------+------+-----+---------+----------------+

| Field| Type| Null | Key | Default | Extra|

+----------+--------------+------+-----+---------+----------------+

| personid | int(11)| NO| PRI | NULL| auto_increment |

| name| varchar(255) | YES|| NULL||

| age| int(11)| YES|| NULL||

+----------+--------------+------+-----+---------+----------------+

mysql> desc address_1nfk_sx;

+---------------+--------------+------+-----+---------+----------------+

| Field| Type| Null | Key | Default | Extra|

+---------------+--------------+------+-----+---------+----------------+

| addressid| int(11)| NO| PRI | NULL| auto_increment |

| addressdetail | varchar(255) | YES|| NULL||

| personid| int(11)| NO| MUL |||

+---------------+--------------+------+-----+---------+----------------+

四、生成的SQL脚本

/* Formatted on 2007/08/22 17:42 (QP5 v5.50) */

CREATE TABLE `address_1nfk` (

`addressid` int(11) NOT NULL auto_increment,

`addressdetail` varchar(255) default NULL,

`personid` int(11) default NULL,

PRIMARY KEY(`addressid`),

KEY `FK9B93456DA6D6C1F5` (`personid`),

CONSTRAINT `FK9B93456DA6D6C1F5` FOREIGN KEY (`personid`) REFERENCES `person_1nfk` (`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

/* Formatted on 2007/08/22 17:42 (QP5 v5.50) */

CREATE TABLE `person_1nfk` (

`personid` int(11) NOT NULL auto_increment,

`name` varchar(255) default NULL,

`age` int(11) default NULL,

PRIMARY KEY(`personid`)

) ENGINE=InnoDB DEFAULT CHARSET=gbk;

五、映射方法

class="com.lavasoft.sx._1_n_fk.Person1nfk_sx"

fetch="select"

cascade="save-update">

六、测试方法

public class Test_1nfk_sx {

public static void main(String[] args){

Address1nfk_sx add1=new Address1nfk_sx();

Address1nfk_sx add2=new Address1nfk_sx();

Person1nfk_sx p=new Person1nfk_sx();

add1.setAddressdetail("郑州市经三路");

add2.setAddressdetail("合肥市宿州路");

p.setName("wang");

p.setAge(30);

p.getAddresses().add(add1);

p.getAddresses().add(add2);

add1.setPerson1nfk(p);

add2.setPerson1nfk(p);

Session session= HibernateUtil.getCurrentSession();

Transaction tx=session.beginTransaction();

session.save(p);

session.saveOrUpdate(add1);

session.saveOrUpdate(add2);

tx.commit();

HibernateUtil.closeSession();

}

}

七、测试结果

1) :正常保存.

session.save(p);

session.saveOrUpdate(add1);

session.saveOrUpdate(add2);

Hibernate: insert into PERSON_1nfk_sx (name, age) values (?, ?)

Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)

Hibernate: insert into ADDRESS_1nfk_sx (addressdetail, personid) values (?, ?)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值