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;

 

 

五、映射方法

 

ManyToOneTabPerson.hbm.xml

<hibernate-mapping> 

    <class name="com.bean.Personn1tab" table="PERSON_1ntab">

        <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>


ManyToOneTabAddress.hbm.xml

<hibernate-mapping> 

    <class name="com.bean.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.setName("p1");
	        p1.setAge(21);

	        p2.setName("p2");
	        p2.setAge(23); 


	        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(); 

	    } 
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
城市应急指挥系统是智慧城市建设的重要组成部分,旨在提高城市对突发事件的预防和处置能力。系统背景源于自然灾害和事故灾难频发,如汶川地震和日本大地震等,这些事件造成了巨大的人员伤亡和财产损失。随着城市化进程的加快,应急信息化建设面临信息资源分散、管理标准不统一等问题,需要通过统筹管理和技术创新来解决。 系统的设计思路是通过先进的技术手段,如物联网、射频识别、卫星定位等,构建一个具有强大信息感知和通信能力的网络和平台。这将促进不同部门和层次之间的信息共享、交流和整合,提高城市资源的利用效率,满足城市对各种信息的获取和使用需求。在“十二五”期间,应急信息化工作将依托这些技术,实现动态监控、风险管理、预警以及统一指挥调度。 应急指挥系统的建设目标是实现快速有效的应对各种突发事件,保障人民生命财产安全,减少社会危害和经济损失。系统将包括预测预警、模拟演练、辅助决策、态势分析等功能,以及应急值守、预案管理、GIS应用等基本应用。此外,还包括支撑平台的建设,如接警心、视频会议、统一通信等基础设施。 系统的实施将涉及到应急网络建设、应急指挥、视频监控、卫星通信等多个方面。通过高度集成的系统,建立统一的信息接收和处理平台,实现多渠道接入和融合指挥调度。此外,还包括应急指挥心基础平台建设、固定和移动应急指挥通信系统建设,以及应急队伍建设,确保能够迅速响应并有效处置各类突发事件。 项目的意义在于,它不仅是提升灾害监测预报水平和预警能力的重要科技支撑,也是实现预防和减轻重大灾害和事故损失的关键。通过实施城市应急指挥系统,可以加强社会管理和公共服务,构建和谐社会,为打造平安城市提供坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值