生活随笔
收集整理的这篇文章主要介绍了
hibernate中List一对多映射关系详解
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
场景:一个Team对一个多个Student,其中Team中的studes属性为List类型
直接上代码,测试通过的:
Team.java
Java代码
package com.fgh.hibernate; import java.util.ArrayList; import java.util.List; @SuppressWarnings("unchecked") public class Team { private String id; private String name; private List students = new ArrayList(); public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List getStudents() { return students; } public void setStudents(List students) { this.students = students; } }
Studeng.java
Java代码
package com.fgh.hibernate; public class Student { private String id; private String cardId; private String name; private int age; private Team team; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getCardId() { return cardId; } public void setCardId(String cardId) { this.cardId = cardId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Team getTeam() { return team; } public void setTeam(Team team) { this.team = team; } }
以下三个配置文件均放在src根目录下:
hibernate主配置文件:
hibernate.cfg.xml
Html代码
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <property name="connection.url"> jdbc:mysql://localhost:3306/hibernate </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="show_sql">true</property> <mapping resource="Team.hbm.xml" /> <mapping resource="Student.hbm.xml" /> </session-factory> </hibernate-configuration>
一方配置文件: Team.hbm.xml
Html代码
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.fgh.hibernate.Team" table="team_list"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="name" column="name" type="string"></property> <list name="students" table="student_list" cascade="all"> <key column="team_id"></key> <!-- index标签表示多的一方 对应一的一方的索引位置 column属性表示数据库中存放数据的字段 index为关键字 避免跟关键字冲突 使用`index` 或 [index] --> <index column="[index]" type="string"></index> <one-to-many class="com.fgh.hibernate.Student" /> </list> </class> </hibernate-mapping>
多方配置文件 : Studeng.hbm.xml
Html代码
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="com.fgh.hibernate.Student" table="student_list"> <id name="id" column="id" type="string"> <generator class="uuid"></generator> </id> <property name="cardId" column="card_id" type="string"></property> <property name="name" column="name" type="string"></property> <property name="age" column="age" type="int"></property> <!-- 建立多对一关联映射关系 column="team_id"表示team这张表通过该字段 和student表关联 --> <many-to-one name="team" column="team_id" class="com.fgh.hibernate.Team"> </many-to-one> </class> </hibernate-mapping>
根据以上三个配置文件,可以生成对应的数据库表,代码如下:
CreateTable.java
Java代码
package com.fgh.hibernate; import org.hibernate.cfg.Configuration; import org.hibernate.tool.hbm2ddl.SchemaExport; public class CreateTable { public static void main(String[] args) { SchemaExport export = new SchemaExport(new Configuration().configure()); export.create(true, true); } }
运行CreateTable.java 生成对应表,后台打印sql如下:
Sql代码
alter table student_list drop foreign key FKFEDE142211CB0B6A drop table if exists student_list drop table if exists team_list create table student_list (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_list (id varchar(255) not null, name varchar(255), primary key (id)) alter table student_list add index FKFEDE142211CB0B6A (team_id), add constraint FKFEDE142211CB0B6A foreign key (team_id) references team_list (id)
ok,表已经创建成功,下面测试保存操作:
InsertTest.java
Java代码
package com.fgh.hibernate; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; public class InsertTest { private static SessionFactory sessionFactory; static { try { sessionFactory = new Configuration().configure() .buildSessionFactory(); } catch (Exception e) { e.printStackTrace(); } } @SuppressWarnings("unchecked") public static void main(String[] args) { Session session = sessionFactory.openSession(); Transaction tx = null; try { Team team = new Team(); team.setName("team1"); Team team2 = new Team(); team2.setName("team2"); Student student = new Student(); student.setAge(20); student.setName("zhangsan"); student.setTeam(team); Student student2 = new Student(); student2.setAge(24); student2.setName("lisi"); student2.setTeam(team); Student student3 = new Student(); student3.setAge(24); student3.setName("student3"); student3.setTeam(team2); Student student4 = new Student(); student4.setAge(24); student4.setName("student4"); student4.setTeam(team2); Student student5 = new Student(); student5.setAge(24); student5.setName("student5"); student5.setTeam(team2); team.getStudents().add(student); team.getStudents().add(student2); team2.getStudents().add(student3); team2.getStudents().add(student4); team2.getStudents().add(student5); tx = session.beginTransaction(); session.save(team); session.save(team2); System.out.println("save success!"); tx.commit(); } catch (Exception e) { e.printStackTrace(); if (null != tx) { tx.rollback(); } } finally { session.close(); } } }
控制打印sql如下:
Sql代码
save success! Hibernate: insert into team_list (name, id) values (?, ?) Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?) Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?) Hibernate: insert into team_list (name, id) values (?, ?) Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?) Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?) Hibernate: insert into student_list (card_id, name, age, team_id, id) values (?, ?, ?, ?, ?) Hibernate: update student_list set team_id=?, `index`=? where id=? Hibernate: update student_list set team_id=?, `index`=? where id=? Hibernate: update student_list set team_id=?, `index`=? where id=? Hibernate: update student_list set team_id=?, `index`=? where id=? Hibernate: update student_list set team_id=?, `index`=? where id=?
02-04插入的是team
05-08插入的是team2
09-13是对student_list表中外键team_id,和排序字段index的维护
student_list表中记录如下:
Sql代码
id name age team_id
Sql代码
8a8adb7b34a45b700134a45b72130002 zhangsan 20 8a8adb7b34a45b700134a45b71fc00010 8a8adb7b34a45b700134a45b72130003 lisi 24 8a8adb7b34a45b700134a45b71fc00011 8a8adb7b34a45b700134a45b72130005 student3 24 8a8adb7b34a45b700134a45b721300040 8a8adb7b34a45b700134a45b72130006 student4 24 8a8adb7b34a45b700134a45b721300041 8a8adb7b34a45b700134a45b72140007 student5 24 8a8adb7b34a45b700134a45b721300042
team_list表中记录:
Sql代码
8a8adb7b34a467320134a46733cc0001 team1 8a8adb7b34a467320134a46733e40004 team2
总结
以上是生活随笔为你收集整理的hibernate中List一对多映射关系详解的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。