1、hibernate映射关系关联查询 Hibernate关联关系映射目录 A单向关联 一对一外键单向关联 一对一主键单向关联 一对一连接表单向关联 一对多外键单向关联 一对多连接表单向关联 多对一外键单向关联 多对一连接表单向关联 多对多单向关联 B双向关联 一对一外键双向关联 一对一主键双向关联 一对一连接表双向关联 一对多外键双向关联 一对多连接表双向关联 多对多双向关联Hibernate 一对一外键单向关联 2007-08-22 13:17:58标签:Hibernate 一对一推送到技术圈 版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。st1:*behavior:url(
2、#ieooui) Hibernate 一对一外键单向关联 事实上,单向1-1与N-1的实质是相同的,1-1是N-1的特例,单向1-1与N-1的映射配置也非常相似。只需要将原来的many-to-one元素增加unique=true属性,用于表示N的一端也必须是唯一的,在N的一端增加了唯一的约束,即成为单向1-1。基于外键的单向1-1的配置将与无连接表N-1关联的many-to-one增加unique=true属性即可。一、模型介绍一个人(Person)对应一个地址(Address)。二、实体(省略getter、setter方法)public class Person11fk private in
3、t personid; private String name; private int age; private Address11fk address11fk;public class Address11fk private int addressid; private String addressdetail;三、表模型mysql desc address_11fk;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| addressid | int(11) | NO | PRI | NULL
4、 | auto_increment | addressdetail | varchar(255) | YES | | NULL | |+-+-+-+-+-+-+mysql desc person_11fk;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| personid | int(11) | NO | PRI | NULL | auto_increment | name | varchar(255) | YES | | NULL | | age | int(11) | YES | | NUL
5、L | | addressId | int(11) | YES | UNI | NULL | |+-+-+-+-+-+-+四、生成的SQL脚本CREATE TABLE address_11fk ( addressid int(11) NOT NULL auto_increment, addressdetail varchar(255) default NULL, PRIMARY KEY(addressid) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=gbk; CREATE TABLE person_11fk ( personid int(
6、11) NOT NULL auto_increment, name varchar(255) default NULL, age int(11) default NULL, addressId int(11) default NULL, PRIMARY KEY(personid), KEY FK68A8818F3F45AA77 (addressId), CONSTRAINT FK68A8818F3F45AA77 FOREIGN KEY (addressId) REFERENCES address_11fk (addressid) ) ENGINE=InnoDB AUTO_INCREMENT=2
7、 DEFAULT CHARSET=gbk; 五、映射方法: 在Person中添加Address属性,映射配置为: 六、测试方法public class Test_11fk public static void main(String args) Person11fk p1=new Person11fk(); p1.setAge(21); p1.setName(p1); Address11fk add1=new Address11fk(); add1.setAddressdetail(郑州市经三路); p1.setAddress11fk(add1); Session session= Hiber
8、nateUtil.getCurrentSession(); Transaction tx=session.beginTransaction(); session.save(add1); session.save(p1); mit(); HibernateUtil.closeSession(); 七、测试结果1) :正常保存. 推荐这么干! session.save(add1); session.save(p1);Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)Hibernate: insert into PERSON_
9、11fk (name, age, addressId) values (?, ?, ?)2) :正常保存. session.save(p1); session.save(add1);Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)Hibernate: update PERSON_11fk set name=?, age=?, addressId=? where person
10、id=?3) :正常保存./ session.save(p1); session.save(add1);Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)4) : 发生异常,不能保存. session.save(p1);/ session.save(add1);Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)Exception in thread main org.hibernate.TransientObjectExce
11、ption: com.lavasoft.dx._1_1_fk.Address11fkHibernate 一对一主键单向关联 2007-08-22 15:26:52标签:Hibernate 一对一推送到技术圈 版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。Hibernate 一对一主键单向关联 1-1的关联可以基于主键关联,但基于主键关联的持久化类不能拥有自己的主键生成策略,它的主键由关联类负责生成。另外,另外,增加one-to-one元素来关联属性,必须为one-to-one元素增加constrained=true属性,表明该类主键由关联类生成。 一、模型介绍 一个人(Per
12、son)对应一个地址(Address)。 二、实体(省略getter、setter方法) public class Person11pk private int personid; private String name; private int age; private Address11pk address11pk; public class Address11pk private int addressid; private String addressdetail; 三、表模型 mysql desc address_11pk;+-+-+-+-+-+-+| Field | Type |
13、Null | Key | Default | Extra |+-+-+-+-+-+-+| addressid | int(11) | NO | PRI | NULL | auto_increment | addressdetail | varchar(255) | YES | | NULL | |+-+-+-+-+-+-+mysql desc person_11pk;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| personid | int(11) | NO | PRI | | | name
14、 | varchar(255) | YES | | NULL | | age | int(11) | YES | | NULL | |+-+-+-+-+-+-+ 四、生成的SQL脚本 /* Formatted on 2007/08/22 14:40 (QP5 v5.50) */CREATE TABLE address_11pk ( addressid int(11) NOT NULL auto_increment, addressdetail varchar(255) default NULL, PRIMARY KEY (addressid) ENGINE=InnoDB AUTO_INCREM
15、ENT=2 DEFAULT CHARSET=gbk;/* Formatted on 2007/08/22 14:41 (QP5 v5.50) */CREATE TABLE person_11pk ( presonid int(11) NOT NULL, name varchar(255) default NULL, age int(11) default NULL, PRIMARY KEY (presonid), KEY FK68A882C591BB393E (presonid), CONSTRAINT FK68A882C591BB393E FOREIGN KEY (presonid) REF
16、ERENCES address_11pk (addressid) ENGINE=InnoDB DEFAULT CHARSET=gbk; 五、映射方法:在Person中配置id生成策略为: address11pk . address11pk 六、测试方法 public class Test_11pk public static void main(String args) Person11pk p1=new Person11pk(); p1.setAge(21); p1.setName(p1); Address11pk add1=new Address11pk(); add1.setAddres
17、sdetail(郑州市经三路); p1.setAddress11pk(add1); Session session= HibernateUtil.getCurrentSession(); Transaction tx=session.beginTransaction(); session.save(add1); session.save(p1); mit(); HibernateUtil.closeSession(); 七、测试结果 1) :正常保存. 推荐这么干! session.save(add1); session.save(p1);Hibernate: insert into ADDR
18、ESS_11fk (addressdetail) values (?)Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)2) :正常保存. session.save(p1); session.save(add1);Hibernate: insert into PERSON_11fk (name, age, addressId) values (?, ?, ?)Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)Hibernat
19、e: update PERSON_11fk set name=?, age=?, addressId=? where personid=?3) :正常保存./ session.save(p1); session.save(add1);Hibernate: insert into ADDRESS_11fk (addressdetail) values (?)4) : 发生异常,不能保存. session.save(p1);/ session.save(add1);Hibernate: insert into PERSON_11fk (name, age, addressId) values (?
20、, ?, ?)Exception in thread main org.hibernate.TransientObjectException: com.lavasoft.dx._1_1_fk.Address11fkHibernate 一对一连接表单向关联 2007-08-22 15:53:57标签:Hibernate 一对一连接表推送到技术圈 版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。Hibernate 一对一连接表单向关联 这种情况很少见,但Hibernate同样允许采用连接表关联1-1.有连接表的1-1同样只需要将N-1的many-to-one元素增加unique=t
21、rue属性即可。一、模型介绍一个人(Person)对应一个地址(Address)。二、实体(省略getter、setter方法)public class Person11tab private int personid; private String name; private int age; private Address11tab address11tab;public class Address11tab private int addressid; private String addressdetail;三、表模型mysql desc address_11tab;+-+-+-+-+-+-+| Field | Type | Null | Key | Default | Extra |+-+-+-+-+-+-+| ad
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1