`

Hibernate创建数据库表(一对一and一对多)

 
阅读更多

 

使用的数据库是MSSQL,库名hibernate,预建立的表有3张。
分别是Student(学生)表,字段名:id、team_di、name、cardId、age。
team(班级)表,字段名:id、team_id。
Certificate(身份证)表,字段名:id、describe。
Student与Certificate是一对一的关系,team与Student是一对多的关系。
1.建立工程->加入Hibernate能力(自动生成.cfg.xml文件)代码如下:

 1<?xml version='1.0' encoding='UTF-8'?>
 2<!DOCTYPE hibernate-configuration PUBLIC
 3          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5
 6<!-- Generated by MyEclipse Hibernate Tools.                   -->
 7<hibernate-configuration>
 8
 9<session-factory>
10    <property name="dialect">
11        org.hibernate.dialect.SQLServerDialect
12    </property>
13    <property name="connection.url">
14        jdbc:microsoft:sqlserver://localhost:1433;databasename=hibernate
15    </property>
16    <property name="connection.username">sa</property>
17    <property name="connection.password">sa</property>
18    <property name="connection.driver_class">
19        com.microsoft.jdbc.sqlserver.SQLServerDriver
20    </property>
21    <property name="myeclipse.connection.profile">MsSQL</property>
22
23    <property name="hibernate.hbm2ddl.auto">create-drop</property>
24    <property name="show_sql">true</property>
25
26
27    <mapping resource="com/zzn/hibernate1/Certificate.hbm.xml" />
28    <mapping resource="com/zzn/hibernate1/Student.hbm.xml" />
29    <mapping resource="com/zzn/hibernate1/Team.hbm.xml" />
30
31
32</session-factory>
33
34</hibernate-configuration>

我们小分析一下要注意的代码。
14行的databasename=hibernate是你要让hibernate把数据库表建立到那个数据库里,需要你来指定。如果不指定就加到默认的库中。
23行的<property name="hibernate.hbm2dll.auro"></property>千万不要忘写。中间的参数可以是create-drop或update,如果你建立的表名在数据库中已有,那么create-drop是将它删然后建立你用hibernate要建立的表,而update则是更新你已有的数据库表,原有的列都不会被删除。
24行是在console中显示执行的SQL语句。
27-29行是即将要建立的映射文件。
2.下面我们要编写映射文件。
Student.hbm.xml

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4<hibernate-mapping>
 5    <class name="com.zzn.hibernate1.Student" table="student" lazy="true">
 6        <id name="id" unsaved-value="null">
 7            <generator class="uuid.hex"></generator>
 8        </id>
 9        <property name="cardid" type="string"></property>
10        <property name="name" type="string"></property>
11        <property name="age" type="int"></property>
12        <one-to-one name="cer" class="com.zzn.hibernate1.Certificate"
13         fetch="join" cascade="all">
14        </one-to-one>
15        <many-to-one name="team" class="com.zzn.hibernate1.Team" column="team_id" fetch="join"
 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4<hibernate-mapping>
 5    <class name="com.zzn.hibernate1.Student" table="student" lazy="true">
 6        <id name="id" unsaved-value="null">
 7            <generator class="uuid.hex"></generator>
 8        </id>
 9        <property name="cardid" type="string"></property>
10        <property name="name" type="string"></property>
11        <property name="age" type="int"></property>
12        <one-to-one name="cer" class="com.zzn.hibernate1.Certificate"
13         fetch="join" cascade="all">
14        </one-to-one>
15        <many-to-one name="team" class="com.zzn.hibernate1.Team" column="team_id" fetch="join" cascade="all>
16        </many-to-one>
17    </class>
18</hibernate-mapping>
="all>
16        </many-to-one>
17    </class>
18</hibernate-mapping>

Certificate.hbm.xml

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4<hibernate-mapping>
 5    <class name="com.zzn.hibernate1.Certificate" table="certificate" lazy="true">
 6        <id name="id">
 7            <generator class="foreign">
 8                <param name="property">stu</param>
 9            </generator>
10        </id>
11        <one-to-one name="stu" class="com.zzn.hibernate1.Student" fetch="join" constrained="true">
12        </one-to-one>
13        <property name="describe" column="describes" type="string"></property>
14     </class>
15</hibernate-mapping>

Team.hbm.xml

 1<?xml version="1.0" encoding="UTF-8"?>
 2<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4<hibernate-mapping>
 5    <class name="com.zzn.hibernate1.Team" table="team" lazy="true">
 6        <id name="id" unsaved-value="null">
 7            <generator class="uuid.hex">
 8            </generator>
 9        </id>
10        <property name="teamName" type="string"></property>
11        <set name="students" inverse="true" fetch="select" lazy="true">
12            <key column="team_id"></key>
13            <one-to-many class="com.zzn.hibernate1.Student"/>
14        </set>
15    </class>
16</hibernate-mapping>

编写持久化类
Student.java

package com.zzn.hibernate1;

public class Student {
    
private String id;
    
private String name;
    
private String cardid;
    
private int age;
    
private Certificate cer;
    
private Team team;
//省略getter和settet方法

Certificate.java

package com.zzn.hibernate1;

public class Certificate {
    
private String id;
    
private String describe;
    
private Student stu;
//省略getter和settet方法

Team.java

package com.zzn.hibernate1;

import java.util.HashSet;
import java.util.Set;

public class Team {
    
private String id;
    
private Set students=new HashSet();
    
private String teamName;
//省略getter和setter方法

以上都完成就可以写个测试文件测试一下了。
Test.java

package com.zzn.hibernate1;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Test {

    
public static void main(String[] args) {
        Configuration conf 
= new Configuration().configure();
        
        SessionFactory sf 
= conf.buildSessionFactory();
        
        Session sess 
= sf.openSession();
        
        Transaction tx 
= sess.beginTransaction();
        
        Student stu
= new Student();
        Certificate cer
=new Certificate();
        Team t
=new Team();
        
        stu.setId(
"1");
        stu.setAge(
22);
        stu.setCardid(
"10001");
        stu.setName(
"xiaoming");
        stu.setTeam(t);
        stu.setCer(cer);
        
        t.setId(
"1001");
        t.setTeamName(
"3.2");
        
        cer.setDescribe(
"asdf");
        cer.setStu(stu);
        
        sess.save(stu);
        tx.commit();
        sess.close();
        
        
        
    }


}
分享到:
评论

相关推荐

    hibernate实现数据库表的多种关系

    本示例着重于如何利用Hibernate来实现不同类型的数据库表之间的关联,包括一对一、一对多、多对一以及多对多的关系。 **一对一关系:** 一对一关联通常发生在两个表之间有唯一对应关系时,比如一个用户只有一个账号...

    Hibernate 多数据库支持解决方案

    总之,为了实现Hibernate对多数据库的支持,需要精心设计和配置,以确保代码的可移植性,同时兼顾性能和数据一致性。以上各点提供了实现这一目标的基础,但实际项目中可能还需要解决更多特定于数据库的问题。通过...

    hibernate中创建表

    创建表的过程主要涉及以下几个步骤: 1. **创建实体类**:在Java中,定义一个实体类,比如`User.java`,并使用`@Entity`注解标记这个类为Hibernate管理的实体。例如: ```java import javax.persistence.Entity; ...

    Hibernate多对多实例+数据库代码

    标题"Hibernate多对多实例+数据库代码"揭示了我们将在讨论一个使用Hibernate框架实现的多对多关系映射的实际案例。在这个实例中,开发人员将两个或多个实体之间的复杂关联转化为简单易懂的数据库操作。描述中提到...

    Hibernate的一对一,一对多,多对多映射

    本文将深入探讨如何利用Hibernate实现数据库表间的一对一、一对多和多对多映射,并通过示例代码演示如何向数据库添加数据。 ### 1. 一对一映射 一对一映射通常用于表示两个实体之间有唯一对应关系的情况。在...

    Hibernate基于连接表的一对多单向关联

    标题 "Hibernate基于连接表的一对多单向关联" 涉及的是数据库对象关系映射(ORM)框架Hibernate中的一个重要概念。在Java开发中,Hibernate是广泛使用的工具,它允许开发者将Java类与数据库表进行映射,简化了数据...

    hibernate数据库相关操作步骤

    **hibernate数据库相关操作步骤** Hibernate是一款强大的Java对象关系映射(ORM)框架,它为开发者提供了在Java应用中操作数据库的简便方法。通过使用Hibernate,开发人员可以避免直接编写SQL语句,而是通过面向...

    hibernate自动生成数据库文件

    5. **Hbm2DDL Auto**:在Hibernate配置中,有一个属性`hibernate.hbm2ddl.auto`,它可以设置为不同的值,如`create`、`update`、`validate`等,控制Hibernate在启动时对数据库的操作。例如,`create`会根据实体类...

    hibernate映射文件生成数据库

    3. 关联关系:如果你的实体类间存在关联,如一对一、一对多或多对多,需要在映射文件中正确地配置外键和关联关系。 总之,通过Hibernate映射文件生成数据库是一种高效的方法,它减少了手动创建数据库表的工作,并且...

    根据hibernate配置文件生成数据库.zip

    SchemaExport是这个工具的一个实现,它可以从Hibernate配置文件读取信息,并创建或更新数据库的表结构。开发者只需要在配置文件中指定相关的数据库连接信息,然后执行SchemaExport,就可以根据对象模型自动创建...

    hibernate框架下对oracle数据库操作所需jar包.zip

    Hibernate是一个开源的Java库,它允许开发者在Java应用中使用对象关系映射技术,将Java对象与关系数据库的数据表进行映射。这使得开发人员无需编写大量的JDBC代码,而是通过简单的对象操作就能实现数据库的CRUD...

    hibernate实例(一对多,多对一)

    在这个“hibernate实例(一对多,多对一)”的主题中,我们将深入探讨两种重要的关联关系:一对一(One-to-One)和一对多(One-to-Many)。 **一对一关联(One-to-One)** 在一对一关联中,一个实体与另一个实体之间...

    hibernate多表联合查询

    ### Hibernate多表联合查询详解 #### 一、引言 在实际项目开发中,我们经常需要处理复杂的数据库查询,特别是涉及到多个表之间的关联查询。...希望本文能对你理解Hibernate的多表联合查询有所帮助。

    Hibernate双向一对多经典实例

    2. **一对多关系**:在数据库设计中,一对多关系表示一个表中的记录可以与另一个表中的多个记录相关联。例如,一个班级可以有多名学生,但一个学生只属于一个班级。 3. **双向一对多**:在Hibernate中,双向一对多...

    权限管理系统springmvc hibernate spring 完整项目带数据库

    这些表之间的关系是一对多和多对多,用于存储用户信息、角色权限分配等。 5. **安全框架**: 权限管理系统通常会集成如Spring Security或Apache Shiro等安全框架,用于处理用户认证(Authentication)和授权...

    hibernate数据库连接

    3. **对象关系映射**:Hibernate支持多种映射方式,如一对一、一对多、多对一、多对多等,通过注解或XML配置文件实现。 4. **查询语言**:Hibernate Query Language (HQL) 是一种面向对象的查询语言,类似于SQL,但...

    Hibernate与JDBC对于数据库CRUD操作性能示例

    Hibernate与JDBC对于数据库的性能操作对比事例,配置,更多信息资源

    Hibernate的多对一和一对多操作实例

    本文将深入探讨Hibernate框架下“多对一”和“一对多”的关联关系,并通过一个具体示例来阐述其操作流程与实现细节。 ### Hibernate中的“多对一”和“一对多” 在数据库设计中,“多对一”(Many-to-One)和“一...

    Hibernate连表查询 Hibernate连表查询

    如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...

    Hibernate数据库操作实例.zip

    6. **关联映射**:学习一对一、一对多、多对一、多对多的关联映射,以及级联操作。 7. **延迟加载和立即加载**:理解Hibernate的懒加载机制,以及何时使用立即加载。 8. **事务管理**:了解Hibernate的Transaction...

Global site tag (gtag.js) - Google Analytics