HIbernate Y映射 Map、list、set

1.总

  • set:不允许重复、无序
  • list:有序、重复
  • map:key-value对形式

2.map与set标签中的element子标签映射的是原子类型(string、data、int、long...),即就是能够直接映射到数据库表字段上的类型,而one-to-many映射的则是实体类型,指的是无法映射到表的某个字段,而是要映射到整张表的类型。

3.map

(1)原子类型

public class Team
{
    private String id;
    private String name;
    private Map students = new HashMap();
}
<hibernate-mapping>
    <class name="com.liule.hibernate.Team" table="team">
        <id name="id" column="id" type="string">
            <generator class="uuid"></generator>
        </id>

        <property name="name"  type="string">
            <column name="name" length="50"></column>
        </property>

        <map name="students" table="team_student"> <!-- table:存放map内的key-value对的值 -->
            <key column="team_id"></key> <!-- 在team_student表内靠team_id联系到team表 -->
            <index column="name" type="string"></index> <!-- 在map内key的值 -->
            <element column="description" type="string" ></element> <!-- map内value的值 -->

        </map>
    </class>
</hibernate-mapping>
public static void main(String[] args)
    {
        //生成表
        SchemaExport export = new SchemaExport(new Configuration().configure());
        export.create(true,true);
    }
Team team = new Team();

        team.setName("team");

        Map map = team.getStudents();
        map.put("zhangsan","sdas");
        map.put("lisi","sadasd");

        Session session = sf.openSession();
        Transaction ts = null;
        try
        {
            ts = session.beginTransaction();
            session.save(team);
            ts.commit();
        }
        catch(Exception ex)
        {
            if(null != ts)
            {
                ts.rollback();
            }
        }
        finally
        {
            session.close();
        }

(2)实体类型

public class Team
{
    private String id;
    private String name;
    private Map students = new HashMap();
}
public class Student
{
    private String id;
    private String name;
    private String cardId;
    private int age;
    private Team team;
}
<hibernate-mapping>
    <class name="com.liule.hibernate.Team" table="team">

        <id name="id" column="id" type="string">
            <generator class="uuid"></generator>
        </id>

        <property name="name"  type="string">
            <column name="name" length="50"></column>
        </property>

        <map name="students" table="team_student" cascade="all"> <!-- table:存放map内的key-value对的值 -->
            <key column="team_id"></key> <!-- 在team_student表内靠team_id联系到team表 -->
            <index column="card_id" type="string"></index> <!-- 在map内key的值 -->
            <one-to-many class="com.liule.hibernate.Student"/><!-- map内value的值 -->

        </map>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="com.liule.hibernate.Student" table="Student">
        <id name="id" column="id" type="string">
            <generator class="uuid"></generator>
        </id>

        <property name="name"  type="string">
            <column name="name" length="50"></column>
        </property>
        <property name="cardId" column="card_id" type="string"></property><!-- key -->
        <property name="age" column="age" type="int"></property>

        <many-to-one name="team" column="team_id" class="com.liule.hibernate.Team"></many-to-one>
    </class>
</hibernate-mapping>
public static void main(String[] args)
    {
        Team team = new Team();
        team.setName("team1");

        Student student = new Student();
        student.setAge(12);
        student.setName("liule");

        student.setTeam(team);

        team.getStudents().put("123456",student);

        Session session = sf.openSession();
        Transaction ts = null;
        try
        {
            session.save(team);
            ts = session.beginTransaction();
            ts.commit();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            if(null != ts)
            {
                ts.rollback();
            }
        }
        finally
        {
            session.close();
        }
    }

4.set

public class Team
{
    private String id;
    private String name;
    private Set students = new HashSet();
}
<hibernate-mapping>
    <class name="com.liule.hibernate.Team" table="team">

        <id name="id" column="id" type="string">
            <generator class="uuid"></generator>
        </id>

        <property name="name"  type="string">
            <column name="name" length="50"></column>
        </property>

        <set name="students" table="student" cascade="all"> <!-- 将set内容,设置在team_table表 -->
            <key column="team_id"></key>
            <element column="name" type="string"></element><!-- column映射到name这一列 -->

        </set>
    </class>
</hibernate-mapping>
public static void main(String[] args)
    {
        Team team = new Team();
        team.setName("team1");

        team.getStudents().add("zhangsan");

        Session session = sf.openSession();
        Transaction ts = null;
        try
        {
            session.save(team);
            ts = session.beginTransaction();
            ts.commit();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            if(null != ts)
            {
                ts.rollback();
            }
        }
        finally
        {
            session.close();
        }
    }

5.list

public class Team
{
    private String id;
    private String name;
    private List students = new ArrayList();
}
public class Student
{
    private String id;
    private String name;
    private String cardId;
    private int age;
    private Team team;
<hibernate-mapping>
    <class name="com.liule.hibernate.Team" table="team">

        <id name="id" column="id" type="string">
            <generator class="uuid"></generator>
        </id>

        <property name="name"  type="string">
            <column name="name" length="50"></column>
        </property>

        <list name="students" table="student" cascade="all">
            <key column="team_id"></key>
            <index column="index_"></index><!-- 所存放的是索引的位置 -->
            <one-to-many class="com.liule.hibernate.Student"/>
        </list>
    </class>
</hibernate-mapping>
<hibernate-mapping>
    <class name="com.liule.hibernate.Student" table="Student">
        <id name="id" column="id" type="string">
            <generator class="uuid"></generator>
        </id>

        <property name="name"  type="string">
            <column name="name" length="50"></column>
        </property>
        <property name="cardId" column="card_id" type="string"></property><!-- key -->
        <property name="age" column="age" type="int"></property>

        <many-to-one name="team" column="team_id" class="com.liule.hibernate.Team"></many-to-one>
    </class>
</hibernate-mapping>
public static void main(String[] args)
    {
        Team team = new Team();
        team.setName("team1");

        Student student1 = new Student();
        Student student2 = new Student();
        Student student3 = new Student();

        student1.setAge(10);
        student1.setCardId("asd");
        student1.setName("zhangsan");
        student1.setTeam(team);

        student2.setAge(11);
        student2.setCardId("asdsa");
        student2.setName("lisi");
        student2.setTeam(team);

        student3.setAge(12);
        student3.setCardId("asasad");
        student3.setName("wangwu");
        student3.setTeam(team);

        team.getStudents().add(student1);
        team.getStudents().add(student2);
        team.getStudents().add(student3);

        Session session = sf.openSession();
        session.save(team);
        Transaction ts = null;
        try
        {
            session.save(team);
            ts = session.beginTransaction();
            ts.commit();
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
            if(null != ts)
            {
                ts.rollback();
            }
        }
        finally
        {
            session.close();
        }
    }
时间: 2024-08-05 19:35:03

HIbernate Y映射 Map、list、set的相关文章

Hibernate Annotaion映射Map

1 package com.jl.module.test.bean; 2  3 import java.util.HashMap; 4 import java.util.Map; 5 import javax.persistence.Column; 6 import javax.persistence.Entity; 7 import javax.persistence.GeneratedValue; 8 import javax.persistence.Id; 9 import javax.p

hibernate y映射失败track is not mapped的解决办法

上面的异常的抛出主要有几个方面: 1.最容易想到的,就是你的from是实体类而不是表名,这个应该大家都知道,注意大小写 2.你的hibernate配置文件中没有加入相应的映射文件<mapping resource=" " /> 3.如果上面两方面都对了,还有错,基本上处于崩溃状态,哈哈....一般是上面两种原因,还是不行,那就是你hql语句有错了,好好检查一下,仔细点,不行就重新写一遍. 原文地址:https://www.cnblogs.com/ljd415690732/p

hibernate关联映射

本文可作为北京尚学堂马士兵hibernate课程的学习笔记. hibernate的映射,主要分为一对一,一对多,多对一,多对多,同时还要单向与双向的区别. OK,不要纠结于名字,我们开始看例子. 一对一单向 老公是一个实体,老婆也是一个实体. 一个老公只有一个老婆,同时一个老婆也只有一个老公. 上面的关系就叫做一对一. 什么叫单向呢. 看代码: package com.bjsxt.hibernate; @Entity public class Husband { private int id;

VIM键盘映射 (Map)~转载

VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命令,可以通过F5键将单词用花括号括起来: :map <F5> i{e<Esc>a}<Esc> 其中:i{将插入字符{,然后使用Esc退回到命令状态:接着用e移到单词结尾,a}增加字符},最后退至命令状态.在执行以上命令之后,光标定位在一个单词上(例如amount),按下F5键,这时字符就会变成{amount}的形式. 不同模式下的键盘映射 使用下表中不

攻城狮在路上(壹) Hibernate(九)--- Hibernate的映射类型

Hibernate采用映射类型作为Java类型和SQL类型的桥梁,对应type属性.分为两种:内置映射类型和客户化映射类型.一.内置映射类型: 1.Java基本类型的Hibernate映射类型: Java基础类型的Hibernate映射类型 Hibernate映射类型 Java类型 标准SQL类型 大小和取值范围 integer或者int int或者java.lang.Integer INTEGER   long long BIGINT   short short SMALLINT   byte

浅谈Hibernate中映射集合属性以及主键和外键

首先说明一下什么叫主键以及外键. 主键和外键是对于数据库来说的,数据库的表才有主键外键的说法. 主键:主键是指标识某个表中唯一且非空的一条记录行的列,这个列中的值不允许有重复的值,用于确定一个表中的一条记录,实际上主键就是告诉别人:这个数据列是唯一的. 外键:引用另外一个表中的主键,在当前表中不一定为唯一的,但是在被引用表中一般唯一.对于关系型数据库来说(比如MySQL)外键是联系数据表之间的唯一方式,主要目的是控制存储在外键表中的数据. 建立外键的前提:本表的列必须与外键类型相同(外键必须是外

hibernate注解映射属性

https://blog.csdn.net/dada678/article/details/51786201 1.普通属性 @Entity:修饰的持久化类的所有属性都会被映射到底层数据库. @Column:修饰属性 @Transient:修饰不想持久化保存的属性. @Lob:修饰大数据属性. 当属性为byte[].Byte[]时数据库对应Blob 当属性为char[].character[].String时,对应为Clob. @Temporal修饰日期类型 支持TemporalType.DATE

hibernate enum映射详解

hibernate enum映射详解 在这里介绍注解的形式,如果想要了解XML配置的方式,可以自行查找相关资料. 例如以下Entity @Entity @Table(name = "t_user") public class User implements Serializable { /** * */ private static final long serialVersionUID = -9042615274714038279L; @Id @GeneratedValue(stra

【SSH快速进阶】——Hibernate继承映射:每个具体类映射一张表

上篇文章说的是每个类映射一张表,不管是父类还是子类.与上篇文章不同的是,这里是每个"具体类"映射一张表,什么意思呢?就是让每个子类(具体的.有意义的类)映射一张表. 场景 与上篇文章场景一样,如下类图 上图中Pig类和Bird类继承Animal类,要让每个具体类映射一张表,就是只映射Pig和Bird,如下表所示: (表 1) 上面的表有个特点就是,t_pig和t_bird的主键永远都不会相同.因为表面上看起来这是两张表,但实际上存储的都是动物(同一类型),所以还可以看做是一张表. 配置