hibernate學習——Set集合配置

來源:互聯網
上載者:User

標籤:hibernate

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: 4000Certificate: PMPCertificate: MCACertificate: MBAFirst Name: Dilip Last Name: Kumar Salary: 3000Certificate: BCACertificate: BA======================First Name: Manoj Last Name: Kumar Salary: 5000Certificate: PMPCertificate: MCACertificate: MBA


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

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.