• Hibernate映射set与List


    1、对于set类型,如果集合中的元素是简单地类型,如字符串型,set使用另外一种映射方式:

    team类:

     1 import java.util.HashSet;
     2 import java.util.Set;
     3 
     4 public class Team
     5 {
     6     private String id;
     7     
     8     private String teamName;
     9     
    10     private Set students = new HashSet();
    11 
    12     public String getId()
    13     {
    14         return id;
    15     }
    16 
    17     public void setId(String id)
    18     {
    19         this.id = id;
    20     }
    21 
    22     public String getTeamName()
    23     {
    24         return teamName;
    25     }
    26 
    27     public void setTeamName(String teamName)
    28     {
    29         this.teamName = teamName;
    30     }
    31 
    32     public Set getStudents()
    33     {
    34         return students;
    35     }
    36 
    37     public void setStudents(Set students)
    38     {
    39         this.students = students;
    40     }
    41 }

    映射文件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 
     5 <hibernate-mapping>
     6     
     7     <class name="com.cdtax.hibernate.Team" table="team">
     8         
     9         <id name="id" column="id" type="string">
    10             <generator class="uuid">
    11             </generator>
    12         </id>
    13             
    14         <property name="teamName" column="teamname" type="string"></property>
    15         
    16         <set name="students" table="student">
    17             <key column="team_id"></key>
    18             <element column="name" type="string"></element>
    19         </set>     
    20     </class>
    21     
    22 </hibernate-mapping>

    使用set标签,一般要对应另外一张表,对于set元素是简单类型的,使用element子标签。

    表的创建:

    1 create table student (team_id varchar(255) not null, name varchar(255))
    2 create table team (id varchar(255) not null, teamname varchar(255), primary key (id))
    3 alter table student add index FK8FFE823BB04F9E7 (team_id), add constraint FK8FFE823BB04F9E7 foreign key (team_id) references team (id)

    测试类:

     1 import java.util.Map;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 
     8 public class HibernateTest
     9 {
    10     private static SessionFactory sessionFactory;
    11     
    12     static
    13     {
    14         try
    15         {
    16             sessionFactory = new Configuration().configure().buildSessionFactory();
    17         }
    18         catch(Exception ex)
    19         {
    20             ex.printStackTrace();
    21         }
    22     }
    23     
    24     public static void main(String[] args)
    25     {
    26                 
    27         Session session = sessionFactory.openSession();
    28         Transaction tx = null;
    29         
    30         try
    31         {
    32             tx = session.beginTransaction();
    33             
    34             Team team = new Team();
    35             team.setTeamName("team");
    36             
    37             team.getStudents().add("zhangsan");
    38             team.getStudents().add("lisi");
    39             team.getStudents().add("wangwu");
    40             
    41             session.save(team);
    42             
    43             tx.commit();
    44         }
    45         catch(Exception ex)
    46         {
    47             if(null != tx)
    48             {
    49                 tx.rollback();
    50             }
    51             ex.printStackTrace();
    52         }
    53         finally
    54         {
    55             session.close();
    56         }
    57     }
    58 }

     

    运行结果:

    hibernate: insert into team (teamname, id) values (?, ?)
    Hibernate: insert into student (team_id, name) values (?, ?)
    Hibernate: insert into student (team_id, name) values (?, ?)
    Hibernate: insert into student (team_id, name) values (?, ?)

     

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

     

    2、List的映射,list元素可以重复,而且是有顺序的。

    举例:

     1 import java.util.ArrayList;
     2 import java.util.List;
     3 
     4 public class Team
     5 {
     6     private String id;
     7     
     8     private String teamName;
     9     
    10     private List students = new ArrayList();
    11 
    12     public String getId()
    13     {
    14         return id;
    15     }
    16 
    17     public void setId(String id)
    18     {
    19         this.id = id;
    20     }
    21 
    22     public String getTeamName()
    23     {
    24         return teamName;
    25     }
    26 
    27     public void setTeamName(String teamName)
    28     {
    29         this.teamName = teamName;
    30     }
    31 
    32     public List getStudents()
    33     {
    34         return students;
    35     }
    36 
    37     public void setStudents(List students)
    38     {
    39         this.students = students;
    40     }
    41     
    42 }
     1 public class Student
     2 {
     3     private String id;
     4     
     5     private String cardId;
     6     
     7     private String name;
     8     
     9     private int age;
    10     
    11     private Team team;
    12 
    13     public String getId()
    14     {
    15         return id;
    16     }
    17 
    18     public void setId(String id)
    19     {
    20         this.id = id;
    21     }
    22 
    23     public String getCardId()
    24     {
    25         return cardId;
    26     }
    27 
    28     public void setCardId(String cardId)
    29     {
    30         this.cardId = cardId;
    31     }
    32 
    33     public String getName()
    34     {
    35         return name;
    36     }
    37 
    38     public void setName(String name)
    39     {
    40         this.name = name;
    41     }
    42 
    43     public int getAge()
    44     {
    45         return age;
    46     }
    47 
    48     public void setAge(int age)
    49     {
    50         this.age = age;
    51     }
    52 
    53     public Team getTeam()
    54     {
    55         return team;
    56     }
    57 
    58     public void setTeam(Team team)
    59     {
    60         this.team = team;
    61     }
    62     
    63 }

    对应的映射文件:

     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 
     5 <hibernate-mapping>
     6     
     7     <class name="com.cdtax.hibernate.Team" table="team">
     8         
     9         <id name="id" column="id" type="string">
    10             <generator class="uuid">
    11             </generator>
    12         </id>
    13             
    14         <property name="teamName" column="teamname" type="string"></property>
    15         
    16         <list name="students" table="student" cascade="all">
    17             <key column="team_id"></key>
    18             <index column="index_"></index>
    19             <one-to-many class="com.cdtax.hibernate.Student"/>
    20         </list>
    21     </class>
    22     
    23 </hibernate-mapping>

    对于Team,多了一个list标签,其中的子标签index来指出数据库表中的一列来维护list的顺序,因为list是有序的,而数据库中表是没有顺序的,只能用一个字段来维护。

     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 
     5 <hibernate-mapping>
     6     
     7     <class name="com.cdtax.hibernate.Student" table="student">
     8         
     9         <id name="id" column="id" type="string">
    10             <generator class="uuid">
    11             </generator>
    12         </id>
    13         <property name="cardId" column="card_id" type="string"></property>
    14         <property name="name" column="name" type="string"></property>
    15         <property name="age" column="age" type="integer"></property>
    16         
    17         <many-to-one name="team" column="team_id" class="com.cdtax.hibernate.Team" cascade="none" fetch="join"></many-to-one>     
    18     </class>
    19 </hibernate-mapping>

    产生表的语句:

     

    create table student (id varchar(255) not null, card_id varchar(255), name varchar(255), age integer, team_id varchar(255), index_ integer, primary key (id))
    create table team (id varchar(255) not null, teamname varchar(255), primary key (id))

    重点关注index_这一字段。

    测试类:

     1 import java.util.Map;
     2 
     3 import org.hibernate.Session;
     4 import org.hibernate.SessionFactory;
     5 import org.hibernate.Transaction;
     6 import org.hibernate.cfg.Configuration;
     7 
     8 public class HibernateTest
     9 {
    10     private static SessionFactory sessionFactory;
    11     
    12     static
    13     {
    14         try
    15         {
    16             sessionFactory = new Configuration().configure().buildSessionFactory();
    17         }
    18         catch(Exception ex)
    19         {
    20             ex.printStackTrace();
    21         }
    22     }
    23     
    24     public static void main(String[] args)
    25     {
    26                 
    27         Session session = sessionFactory.openSession();
    28         Transaction tx = null;
    29         
    30         try
    31         {
    32             tx = session.beginTransaction();
    33             
    34             Team team = new Team();
    35             team.setTeamName("team1");
    36             
    37             Team team2= new Team();
    38             team2.setTeamName("team2");
    39             
    40             Student s1 = new Student();
    41             Student s2 = new Student();
    42             Student s3 = new Student();
    43             Student s4 = new Student();
    44             Student s5 = new Student();
    45             Student s6 = new Student();
    46             
    47             s1.setName("zhangsan");
    48             s2.setName("lisi");
    49             s3.setName("wangwu");
    50             s4.setName("zhaoliu");
    51             s5.setName("5zhaoliu");
    52             s6.setName("6zhaoliu");
    53             
    54             team.getStudents().add(s1);
    55             team.getStudents().add(s2);
    56             
    57             team2.getStudents().add(s3);
    58             team2.getStudents().add(s4);
    59             team2.getStudents().add(s5);
    60             team2.getStudents().add(s6);
    61             
    62             session.save(team);
    63             session.save(team2);
    64             
    65             tx.commit();
    66         }
    67         catch(Exception ex)
    68         {
    69             if(null != tx)
    70             {
    71                 tx.rollback();
    72             }
    73             ex.printStackTrace();
    74         }
    75         finally
    76         {
    77             session.close();
    78         }
    79     }
    80 }

    Hibernate: insert into team (teamname, id) values (?, ?)

     

    Hibernate: insert into student (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
    Hibernate: insert into student (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
    Hibernate: insert into team (teamname, id) values (?, ?)
    Hibernate: insert into student (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
    Hibernate: insert into student (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
    Hibernate: insert into student (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
    Hibernate: insert into student (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?)
    Hibernate: update student set team_id=?, index_=? where id=?
    Hibernate: update student set team_id=?, index_=? where id=?
    Hibernate: update student set team_id=?, index_=? where id=?
    Hibernate: update student set team_id=?, index_=? where id=?
    Hibernate: update student set team_id=?, index_=? where id=?
    Hibernate: update student set team_id=?, index_=? where id=?

  • 相关阅读:
    ubuntu12.04 LTS 安装vmware 错误解决方法
    Linux 下的Bluetooth 架构 分类: Android驱动 20120316 11:07 492人阅读 评论(0) 收藏 举报 实战Linux Bluetooth编程(一) 协议栈概述
    通过DEFINE 生存config.h 配置
    Git的初次使用 ; Git常用命令查询 ; Git push ; Git pull 20111216 17:32 在介绍安装和简单使用前,先看一下百度百科中的简介吧: ———————————
    Android BCM4330 蓝牙BT驱动调试记录
    Linux的cpufreq(动态变频)技术
    高通平台android开发总结
    ssh 客户端配置文件
    Jprofile使用随笔_1_安装与监控linux
    服务器cpu占用100%,如何排查(java进程&sql)
  • 原文地址:https://www.cnblogs.com/caoyc/p/5597122.html
Copyright © 2020-2023  润新知