Hibernate中一对一以及一对多之间的关系
一:一对一关系(数据库--mysql)
1)人和省份证:一个人只能拥有一个身份证,一张身份证也只属于一个人
一对一建表是通过外键来建立联系的
实现步骤:
1、在数据库中创建两张表一张用户表(User),一张省份证表(Card--不需要建立自动增长,建立主键就可以了,通过hibernate来建立关系)
2、建立实体类User.java,Card.java
3、为两张实体类关联起来
在User.java实体类中添加一个Card.java,并添加get、set方法
private Card card;
在Card.java实体类中添加一个User.java,并添加get、set方法
private User user;
4、写两个实体类的映射文件
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-11-3 19:26:44 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<!-- 一对一之用户映射 -->
<class name="com.entity.User" table="USER">
<id name="uid" type="int">
<column name="UID" />
<generator class="native" />
</id>
<property name="uname" type="java.lang.String">
<column name="UNAME" />
</property>
<!-- 一对一关系 -->
<one-to-one name="card" class="com.entity.Card" cascade="all-delete-orphan"></one-to-one>
</class>
</hibernate-mapping>
Card.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-11-3 19:26:44 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<!-- 一对一之省份证映射 -->
<class name="com.entity.Card" table="CARD">
<id name="uid" type="int">
<column name="UID" />
<!-- 建立外键 -->
<generator class="foreign" >
<param name="property">user</param>
</generator>
</id>
<property name="cnum" type="java.lang.String">
<column name="CNUM" />
</property>
<!-- 一对一关系 -->
<one-to-one name="user" class="com.entity.User" ></one-to-one>
</class>
</hibernate-mapping>
5、在配置文件中加入两个映射文件
<!-- 配置一对多的映射 -->
<mapping resource="com/entity/Sheng.hbm.xml"></mapping>
<mapping resource="com/entity/City.hbm.xml"></mapping>
6、你可以先在测试类中测试你的数据库连接以及数据是否能够与表有交互
二:一对多关系(数据库--mysql)
1)商品和类别:一个类里面可以有多个商品,但是一个商品只能属于一个类
一对多建表是通过外键来建立联系的
实现步骤:
1、在数据库中创建两张表一张类别表(category),一张商品表(product)
2、建立实体类Category.java,Product.java
3、为两张实体类关联起来
在Category.java实体类中set一个list,添加get和set方法。存储类别的商品。
private Set<Product> product=new HashSet<Product>();
在Product.java中表示所属的类别。添加get和set方法
private Category category;
4、写两个实体类的映射文件
Category.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-11-4 14:26:49 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.entity.Category" table="CATEGORY">
<id name="category_id" type="int">
<column name="CATEGORY_ID" />
<generator class="native" />
</id>
<property name="category_name" type="java.lang.String">
<column name="CATEGORY_NAME" />
</property>
<!--name是set集合的名称-->
<set name="product" table="PRODUCT" inverse="false" lazy="true" cascade="all-delete-orphan"><key> <!--外键>
<column name="CATEGORY_ID" />
</key>
<one-to-many class="com.entity.Product" /> <!--实体的全路径-->
</set>
</class>
</hibernate-mapping>
Product.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2017-11-4 14:26:49 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping>
<class name="com.entity.Product" table="PRODUCT">
<id name="product_no" type="int">
<column name="PRODUCT_NO" />
<generator class="native" />
</id>
<property name="product_name" type="java.lang.String">
<column name="PRODUCT_NAME" />
</property>
<property name="product_price" type="double">
<column name="PRODUCT_PRICE" />
</property>
<many-to-one name="category" class="com.entity.Category" fetch="join">
<column name="CATEGORY_ID" />
</many-to-one>
</class>
</hibernate-mapping>
5、在配置文件中加入两个映射文件
<!-- 配置一对多的映射 -->
<mapping resource="com/entity/Sheng.hbm.xml"></mapping>
<mapping resource="com/entity/City.hbm.xml"></mapping>
6、测试类