Hibernate 多对一连接表单向关联
| Hibernate 多对一连接表单向关联 | 
|  | 
| 一、模型介绍 | 
|  | 
| 多个人(Person)对应一个地址(Address)。 | 
|  | 
| 二、实体(省略getter、setter方法) | 
|  | 
| public class Personn1tab { | 
|     private int personid; | 
|     private String name; | 
|     private int age; | 
|     private Addressn1tab addressn1tab; | 
|  | 
| public class Addressn1tab { | 
|     private int addressid; | 
|     private String addressdetail; | 
|  | 
| 三、表模型 | 
|  | 
| mysql> desc address_n1tab; | 
| +---------------+--------------+------+-----+---------+----------------+ | 
| | Field         | Type         | Null | Key | Default | Extra          | | 
| +---------------+--------------+------+-----+---------+----------------+ | 
| | addressid     | int(11)      | NO   | PRI | NULL    | auto_increment | | 
| | addressdetail | varchar(255) | YES  |     | NULL    |                | | 
| +---------------+--------------+------+-----+---------+----------------+ | 
|  | 
| mysql> desc join_n1tab; | 
| +------------+---------+------+-----+---------+-------+ | 
| | Field      | Type    | Null | Key | Default | Extra | | 
| +------------+---------+------+-----+---------+-------+ | 
| | personid   | int(11) | NO   | PRI |         |       | | 
| | addressn1tab | int(11) | YES  | MUL | NULL    |       | | 
| +------------+---------+------+-----+---------+-------+ | 
|  | 
| mysql> desc person_n1tab; | 
| +----------+--------------+------+-----+---------+----------------+ | 
| | Field    | Type         | Null | Key | Default | Extra          | | 
| +----------+--------------+------+-----+---------+----------------+ | 
| | personid | int(11)      | NO   | PRI | NULL    | auto_increment | | 
| | name     | varchar(255) | YES  |     | NULL    |                | | 
| | age      | int(11)      | YES  |     | NULL    |                | | 
| +----------+--------------+------+-----+---------+----------------+ | 
|  | 
| 四、生成的SQL脚本 | 
|  | 
| CREATE TABLE `address_n1tab` ( | 
|   `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 `join_n1tab` ( | 
|   `personid` int(11) NOT NULL, | 
|   `address11fk` int(11) default NULL, | 
|   PRIMARY KEY  (`personid`), | 
|   KEY `FKAC780AAADAE3A82C` (`personid`), | 
|   KEY `FKAC780AAAC6242A64` (`address11fk`), | 
|   CONSTRAINT `FKAC780AAAC6242A64` FOREIGN KEY (`address11fk`) REFERENCES `address_n1tab` (`addressid`), | 
|   CONSTRAINT `FKAC780AAADAE3A82C` FOREIGN KEY (`personid`) REFERENCES `person_n1tab` (`personid`) | 
| ) ENGINE=InnoDB DEFAULT CHARSET=gbk; | 
|  | 
| CREATE TABLE `person_n1tab` ( | 
|   `personid` int(11) NOT NULL auto_increment, | 
|   `name` varchar(255) default NULL, | 
|   `age` int(11) default NULL, | 
|   PRIMARY KEY  (`personid`) | 
| ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=gbk; | 
|  | 
|  | 
| 五、映射方法 | 
|  | 
| <hibernate-mapping> | 
|     <class name="com.lavasoft.dx._n_1_tab.Personn1tab" table="PERSON_n1tab"> | 
|         <id name="personid"> | 
|             <generator class="identity"/> | 
|         </id> | 
|         <property name="name"/> | 
|         <property name="age"/> | 
|         <!--使用join元素显式确定链接表--> | 
|         <join table="join_n1tab"> | 
|             <!--映射关联所用的外键--> | 
|             <key column="personid"/> | 
|             <many-to-one name="addressn1tab"/> | 
|         </join> | 
|     </class> | 
| </hibernate-mapping> | 
|  | 
| <hibernate-mapping> | 
|     <class name="com.lavasoft.dx._n_1_tab.Addressn1tab" table="ADDRESS_n1tab"> | 
|         <id name="addressid"> | 
|             <generator class="identity"/> | 
|         </id> | 
|         <property name="addressdetail"/> | 
|     </class> | 
| </hibernate-mapping> | 
|  | 
|  | 
| 六、测试方法 | 
|  | 
| public class Test_n1tab { | 
|     public static void main(String[] args){ | 
|         Personn1tab p1=new Personn1tab(); | 
|         Personn1tab p2=new Personn1tab(); | 
|  | 
|         p1.setAge(21); | 
|         p1.setName("p1"); | 
|  | 
|         p2.setAge(23); | 
|         p2.setName("p2"); | 
|  | 
|         Addressn1tab add=new Addressn1tab(); | 
|         add.setAddressdetail("郑州市经三路"); | 
|  | 
|         p1.setAddressn1tab(add); | 
|         p2.setAddressn1tab(add); | 
|  | 
|         Session session=HibernateUtil.getCurrentSession(); | 
|         Transaction tx=session.beginTransaction(); | 
|         session.save(add); | 
|         session.save(p1); | 
|         session.save(p2); | 
|         tx.commit(); | 
|         HibernateUtil.closeSession(); | 
|     } | 
| } | 
|  | 
| 七、测试结果 | 
|  | 
| 1) :正常保存. 推荐这么干! | 
|  | 
|         session.save(p1); | 
|         session.save(p2); | 
|  | 
| Hibernate: insert into ADDRESS_n1tab (addressdetail) values (?) | 
| Hibernate: insert into PERSON_n1tab (name, age) values (?, ?) | 
| Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?) | 
| Hibernate: insert into PERSON_n1tab (name, age) values (?, ?) | 
| Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?) | 
|  | 
| 2) :正常保存. | 
|         session.save(p1); | 
|         session.save(p2); | 
|         session.save(add); | 
|  | 
|  Hibernate: insert into PERSON_n1tab (name, age) values (?, ?) | 
|  Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?) | 
|  Hibernate: insert into PERSON_n1tab (name, age) values (?, ?) | 
|  Hibernate: insert into join_n1tab (address11fk, personid) values (?, ?) | 
|  | 
|  | 
本文出自 “熔  岩” 博客,转载请与作者联系!

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号