Set集合的配置

数据表的创建:表关系一个员工拥有多个身份

create table EMPLOYEE ( id INT NOT NULL auto_increment, first_name VARCHAR(20) default NULL, last_name VARCHAR(20) default NULL, salary INT default NULL, PRIMARY KEY (id) );
create table CERTIFICATE ( id INT NOT NULL auto_increment, certificate_name VARCHAR(30) default NULL, employee_id INT default NULL, PRIMARY KEY (id) );

创建相应的实体:

package com.study01;import java.util.Set;public class Employee {private int id;private String firstName;private String lastName;private int salary;private Set certificates;public Employee() {}public Employee(String fname, String lname, int salary) {this.firstName = fname;this.lastName = lname;this.salary = salary;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getFirstName() {return firstName;}public void setFirstName(String firstName) {this.firstName = firstName;}public String getLastName() {return lastName;}public void setLastName(String lastName) {this.lastName = lastName;}public int getSalary() {return salary;}public void setSalary(int salary) {this.salary = salary;}public Set getCertificates() {return certificates;}public void setCertificates(Set certificates) {this.certificates = certificates;}}
package com.study01;public class Certificate {private int id;private String name;public Certificate() {}public Certificate(String name) {this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean equals(Object obj) {if (obj == null)return false;if (!this.getClass().equals(obj.getClass()))return false;Certificate obj2 = (Certificate) obj;//if ((this.id == obj2.getId()) && (this.name.equals(obj2.getName()))) {// return true;//}if(this.name.equals(obj2.getName())) return true;return false;}public int hashCode() {int tmp = 0;tmp = (id + name).hashCode();return tmp;}
}

注意这里对equals和hashCode方法进行了重写。set集合中元素不反复。是否反复,是通过hashCode和equals方法进行比較的。

hibernate主配置文件的配置例如以下:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-configuration SYSTEM "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration><session-factory><property name="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </property><property name="hibernate.connection.driver_class"> com.mysql.jdbc.Driver </property> <!-- Assume test is the database name --><property name="hibernate.connection.url"> jdbc:mysql://localhost/test </property><property name="hibernate.connection.username"> root </property><property name="hibernate.connection.password"> 253503125 </property> <!-- List of XML mapping files --><mapping resource="com/study01/Employee.hbm.xml" /><mapping resource="com/study01/Certificate.hbm.xml" /></session-factory>
</hibernate-configuration>

映射文件的配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.study01"><class name="Employee" table="EMPLOYEE"><meta attribute="class-description"> This class contains the employee detail. </meta><id name="id" type="int" column="id"><generator class="native" /></id><set name="certificates" cascade="all"><key column="employee_id" /><one-to-many class="Certificate" /></set><property name="firstName" column="first_name" type="string" /><property name="lastName" column="last_name" type="string" /><property name="salary" column="salary" type="int" /></class></hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.study01"><class name="Certificate" table="CERTIFICATE"><meta attribute="class-description"> This class contains the certificate records. </meta><id name="id" type="int" column="id"><generator class="native" /></id><property name="name" column="certificate_name" type="string" /></class>
</hibernate-mapping>

測试:

package com.study01;import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;public class ManageEmployee {private static SessionFactory factory;public static void main(String[] args) {try {factory = new Configuration().configure().buildSessionFactory();} catch (Throwable ex) {System.err.println("Failed to create sessionFactory object." + ex);throw new ExceptionInInitializerError(ex);}ManageEmployee ME = new ManageEmployee();HashSet set1 = new HashSet();set1.add(new Certificate("MCA"));set1.add(new Certificate("MBA"));set1.add(new Certificate("PMP"));set1.add(new Certificate("MCA"));/* Add employee records in the database */Integer empID1 = ME.addEmployee("Manoj", "Kumar", 4000, set1); HashSet set2 = new HashSet();set2.add(new Certificate("BCA"));set2.add(new Certificate("BA")); Integer empID2 = ME.addEmployee("Dilip", "Kumar", 3000, set2);ME.listEmployees(); /* Update employee's salary records */ME.updateEmployee(empID1, 5000);/* Delete an employee from the database */ME.deleteEmployee(empID2); /* List down all the employees */System.out.println("======================");ME.listEmployees();} /* Method to add an employee record in the database */public Integer addEmployee(String fname, String lname, int salary, Set cert) {Session session = factory.openSession();Transaction tx = null;Integer employeeID = null;try {tx = session.beginTransaction();Employee employee = new Employee(fname, lname, salary);employee.setCertificates(cert);employeeID = (Integer) session.save(employee);tx.commit();} catch (HibernateException e) {if (tx != null)tx.rollback();e.printStackTrace();} finally {session.close();}return employeeID;} /* Method to list all the employees detail */public void listEmployees() {Session session = factory.openSession();Transaction tx = null;try {tx = session.beginTransaction();List employees = session.createQuery("FROM Employee").list();for (Iterator iterator1 = employees.iterator(); iterator1.hasNext();) {Employee employee = (Employee) iterator1.next();System.out.print("First Name: " + employee.getFirstName());System.out.print(" Last Name: " + employee.getLastName());System.out.println(" Salary: " + employee.getSalary());Set certificates = employee.getCertificates();for (Iterator iterator2 = certificates.iterator(); iterator2.hasNext();) {Certificate certName = (Certificate) iterator2.next();System.out.println("Certificate: " + certName.getName());}}tx.commit();} catch (HibernateException e) {if (tx != null)tx.rollback();e.printStackTrace();} finally {session.close();}} /* Method to update salary for an employee */public void updateEmployee(Integer EmployeeID, int salary) {Session session = factory.openSession();Transaction tx = null;try {tx = session.beginTransaction();Employee employee = (Employee) session.get(Employee.class,EmployeeID);employee.setSalary(salary);session.update(employee);tx.commit();} catch (HibernateException e) {if (tx != null)tx.rollback();e.printStackTrace();} finally {session.close();}} /* Method to delete an employee from the records */public void deleteEmployee(Integer EmployeeID) {Session session = factory.openSession();Transaction tx = null;try {tx = session.beginTransaction();Employee employee = (Employee) session.get(Employee.class,EmployeeID);session.delete(employee);tx.commit();} catch (HibernateException e) {if (tx != null)tx.rollback();e.printStackTrace();} finally {session.close();}}
}

注意在Certificate中加入�了两个MCA。执行结果例如以下:

First Name: Manoj Last Name: Kumar Salary: 4000
Certificate: PMP
Certificate: MCA
Certificate: MBA
First Name: Dilip Last Name: Kumar Salary: 3000
Certificate: BCA
Certificate: BA
======================
First Name: Manoj Last Name: Kumar Salary: 5000
Certificate: PMP
Certificate: MCA
Certificate: MBA

MCA仅仅出现了一次!注意Certificate中hashCode和equals的作用。

转载于:https://www.cnblogs.com/hrhguanli/p/4025157.html

hibernate学习——Set集合配置相关推荐

  1. 框架写mysql插入为空_学习springMVC框架配置遇到的问题-数据写入不进数据库时的处理办法...

    Idea简单SpringMVC框架配置 前边已经介绍过了Struts在Idea上的配置,相对于Struts来说,我觉得SpringMVC有更多的优势,首先Struts是需要对action进行配置,页面 ...

  2. Hibernate学习基本配置

    hibernate是一个持久层框架,是一个ORM(object,relattional mapping)对象关系映射框架,对jdbc进行了轻量级对象框架. 所谓的对象关系映射是指,一个java对象和关 ...

  3. Hibernate学习笔记之EHCache的配置

    Hibernate默认二级缓存是不启动的,启动二级缓存(以EHCache为例)需要以下步骤: 1.添加相关的包: Ehcache.jar和commons-logging.jar,如果hibernate ...

  4. Hibernate学习(九)———— 二级缓存和事务级别详讲

    序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...

  5. Hibernate学习汇总

    一.Hibernate的基本原理 1.什么是Hibernate Hibernate,翻译过来是冬眠的意思,正好现在已经进入秋季,世间万物开始准备冬眠了.其实对于对象来说就是持久化. Hibernate ...

  6. Hibernate学习记录

     Hibernate是一个关于java方面的ORM(Object/Relation Mapping,对象关系映射)框架. ORM的思想:主要实现的功能就是将关系数据库中表的记录应映射成对象,以对象的形 ...

  7. hibernate学习笔记(总结)

    hibernate学习笔记 课程内容 6 1 HelloWorld 6 2 Hibernate原理模拟-什么是O/R Mapping以及为什么要有O/R Mapping 6 3 常见的0/R框架(了解 ...

  8. Hibernate学习大全

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

  9. Hibernate 学习教程

    第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHelloWorld 7 第7课 ...

最新文章

  1. 超简略的samba配置
  2. 从科幻灵感开始的一场数据存储基础设施实验之旅
  3. MATLAB图像取点操作
  4. abcde依次进入一个队列_详解队列队形及口令(新教师必看)
  5. Web UI⾃动化测试平台,专治Web 的各种疑难杂症。
  6. 函数进阶之生成器和迭代器
  7. j剑指offer面试题[33]-把数组排成最小的数
  8. 如何将Excel工作表另存为PDF
  9. 初学者吉他怎么选?适合男女生新手吉他入门品牌推荐!
  10. python爬取17000个球员_Python爬取NBA球员生涯数据及简单可视化
  11. 终身机器学习(Lifelong Machine Learning)综述
  12. c++数据结构小助手 : 可视化树与图工具
  13. 计算机连接不上蓝牙鼠标,win7系统蓝牙鼠标连接不上的解决方法
  14. RNN及变体LSTM、GRU(在NILM中的应用)
  15. JEP 378 Text blocks private interface methods
  16. vue写一个翻页的时间插件
  17. 遇到的问题要记录下来 javascript值班表
  18. ChinaSoft 论坛巡礼 | NASAC 青年软件创新奖论坛
  19. 【Google 开发者大会】一篇看懂 TensorFlow 如何助力高效开发
  20. 如何确定matlab多项式拟合的阶数,基于多项式拟合函数趋势项与阶数估计加速度、速度、位移的方法与流程...

热门文章

  1. python网课阿里云_阿里云大牛用过的680集Python视频教程无偿分享,学完万物皆可爬...
  2. mysql mgr 三节点_详解MySQL 5.7 MGR单主确定主节点方法
  3. java实体类 判断 字段_java8 根据实体类中的某个字段对实体类去重
  4. 网络规划设计师考试总结
  5. android ripple 大小,Android L限制Ripple水波纹范围大小
  6. ab plc软件_【原创】AB上位机FactoryTalk View的使用教程(上)
  7. gdb+zbacktrace找到cpu过高php代码
  8. U3D脚本开发基础(转载)
  9. 2018前端学习总结
  10. 如何将外部的obj模型导入OpenGL