Hibernate's 7.one2many two-way

Source: Internet
Author: User

Table structure



Entity class relationships


Entity class source Code

Student

Package Com.demo.model;import Java.io.unsupportedencodingexception;import java.util.set;/** Student Information * @author  Wobendiankun * 2014-10-19 pm 08:54:29 */public class Student {private int studentid;p rivate String studentname;p rivate int Age;private set<certificate> certificates;p ublic int Getstudentid () {return studentid;} public void Setstudentid (int studentid) {this.studentid = StudentID;} Public String Getstudentname () {return studentname;} public void Setstudentname (String studentname) {this.studentname = Studentname;} public int getage () {return age;} public void Setage (int.) {this.age = age;} @Overridepublic string toString () {string str= ""; if (studentname!=null) {try {str=new string (studentname.getbytes (" UTF-8 "));} catch (Unsupportedencodingexception e) {e.printstacktrace ();}} Return "Student [studentid=" + StudentID + ", studentname=" + str + ", age=" + Age + "]";} Public set<certificate> getcertificates () {return certificates;} public void Setcertificates (set<certificate> CErtificates) {this.certificates = certificates;}} 

Certificate

Package com.demo.model;/** Certificate of Qualification * @author Wobendiankun * 2014-10-25 morning 11:43:21 */public class Certificate {/** * Certificate ID */PR ivate int certificateid;/** * Certificate name */private string certificatename;/** * Certificate number */private string Certificateno;p rivate Stu Dent student;p Ublic int Getcertificateid () {return certificateid;} public void Setcertificateid (int certificateid) {This.certificateid = Certificateid;} Public String Getcertificatename () {return certificatename;} public void Setcertificatename (String certificatename) {this.certificatename = Certificatename;} Public String Getcertificateno () {return certificateno;} public void Setcertificateno (String certificateno) {This.certificateno = Certificateno;} Public Student getstudent () {return Student;} public void Setstudent (Student Student) {this.student = Student;}}


XML configuration:

Student.hbm.xml

<?xml version= "1.0"? ><! DOCTYPE hibernate-mapping public        "-//hibernate/hibernate mapping DTD 3.0//en"        "http// Hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">

Certificate.hbm.xml

<?xml version= "1.0"? ><! DOCTYPE hibernate-mapping public        "-//hibernate/hibernate mapping DTD 3.0//en"        "http// Hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">


Crud:

Add

@Testpublic void Addtest () {set<certificate> certificates=new hashset<certificate> (); Student Student = new Student () Student.setstudentname ("Harry"); Student.setage (35); Certificate certificate1 = new Certificate () certificate1.setcertificatename ("AA"); Certificate1.setcertificateno (" 3a10001 "); certificate1.setstudent (student); Certificate certificate2 = new Certificate () certificate2.setcertificatename ("BB"); Certificate2.setcertificateno (" 3a10002 "); certificate2.setstudent (student); Session session = Null;try {session = Hibernateutil.opensession (); session.begintransaction ();//save one first, Save Manysession.save (Student), Session.save (certificate1); Session.save (Certificate2); Session.gettransaction (). Commit ();} catch (Exception e) {session.gettransaction (). rollback (); E.printstacktrace ();} finally {hibernateutil.closesession ( session);}}


Issued sql:

Hibernate:insert to T_student (Student_name, age, student_id) VALUES (?,?,?) Hibernate:insert into T_certificate (Certificate_name, Certificate_no, student_id, certificate_id) VALUES (?,?,?,?) Hibernate:insert into T_certificate (Certificate_name, Certificate_no, student_id, certificate_id) VALUES (?,?,?,?)


Update

@Testpublic void Updatestudenttest () {Student student=new Student (); Student.setstudentid (n); student.setstudentname ("Li Nine"); Session session = Null;try {session = Hibernateutil.opensession (); Session.begintransaction (); Session.update (student) ; Session.gettransaction (). commit ();} catch (Exception e) {session.gettransaction (). rollback (); E.printstacktrace ();} finally {hibernateutil.closesession ( session);}}


Issued sql:

Hibernate:update t_student set student_name=?, age=? where student_id=? Hibernate:update t_certificate set student_id=null where student_id=?


Because Student is the one side, the default is to maintain the associated field, will send an UPDATE statement, the solution is to join the configuration Inverse= "true" (Student.hbm.xml set element, add attributes),

inverse= "True" is represented by: Many's party to maintain the associated field

Student.hbm.xml:

<?xml version= "1.0"? ><! DOCTYPE hibernate-mapping public        "-//hibernate/hibernate mapping DTD 3.0//en"        "http// Hibernate.sourceforge.net/hibernate-mapping-3.0.dtd ">


Updateinverse

@Testpublic void Updatestudentwithinversetest () {Student student=new Student (); Student.setstudentid (63); Student.setstudentname ("Li Nine"); Session session = Null;try {session = Hibernateutil.opensession (); Session.begintransaction (); Session.update (student) ; Session.gettransaction (). commit ();} catch (Exception e) {session.gettransaction (). rollback (); E.printstacktrace ();} finally {hibernateutil.closesession ( session);}}


Issued sql:

Hibernate:update t_student set student_name=?, age=? where student_id=?

The UPDATE statement that maintains the associated field does not appear



Loadcertificate:

 @Testpublic void Loadcertificatetest () {Session session = Null;try {session = Hibernateutil.opensession (); Session.begintransaction (); Certificate certificate= (Certificate) session.load (Certificate.class, 65); Certificate certificate2= (Certificate) session.load (Certificate.class, 66); System.out.println ("Number:" +certificate.getcertificateno ()); System.out.println ("Name:" +certificate.getstudent (). Getstudentname ()); System.out.println ("---------------------------"); System.out.println ("Number:" +certificate2.getcertificateno ()); System.out.println ("Name:" +certificate2.getstudent (). Getstudentname ()); Session.gettransaction (). commit ();} catch (Exception e) {session.gettransaction (). rollback (); E.printstacktrace ();} finally {hibernateutil.closesession (
 session);}} 


Issued sql:

Hibernate:select certificat0_.certificate_id as certific1_1_0_, certificat0_.certificate_name as certific2_1_0_, Certificat0_.certificate_no as certific3_1_0_, certificat0_.student_id as student4_1_0_ from T_certificate certificat0 _ Where certificat0_.certificate_id=? No.: 3a10001hibernate:select student0_.student_id as student1_0_0_, student0_. Student_name as student2_0_0_, student0_.age as age0_0_ from T_student student0_ where student0_.student_id=? Name: Li Nine---------------------------hibernate:select certificat0_.certificate_id as certific1_1_0_, certificat0_. Certificate_name as certific2_1_0_, certificat0_.certificate_no as certific3_1_0_, certificat0_.student_id as Student4 _1_0_ from T_certificate certificat0_ where certificat0_.certificate_id=? No.: 3a10002 Name: Li Nine

A total of three query statements, Query ID 66 record, because the ID of 63 student object has been changed in the session, so no longer issue query ID 63 statement


Loadstudent:

@Testpublic void Loadstudenttest () {Session session = Null;try {session = Hibernateutil.opensession (); Session.begintransaction (); Student student= (Student) session.load (Student.class, 63); System.out.println ("Name:" +student.getstudentname ()); for (Certificate c:student.getcertificates ()) { System.out.println ("\ t number:" +c.getcertificateno ());} System.out.println ("-------------------"); Certificate c1= (Certificate) session.get (Certificate.class, 65); System.out.println ("Number:" +c1.getcertificateno ()); Session.gettransaction (). commit ();} catch (Exception e) {session.gettransaction (). rollback (); E.printstacktrace ();} finally {hibernateutil.closesession ( session);}}


Issued SQL

hibernate:select student0_.student_id as student1_0_0_, student0_.student_name as student2_0_0_, Student0_.age as age0_0_ from T_student student0_ where student0_.student_id=? Name: Li Nine Hibernate:select certificat0_. student_id as student4_0_1_, certificat0_.certificate_id as certific1_1_, certificat0_.certificate_id as Certific1_1_0 _, Certificat0_.certificate_name as certific2_1_0_, certificat0_.certificate_no as certific3_1_0_, certificat0_. student_id as student4_1_0_ from T_certificate certificat0_ where certificat0_.student_id=? No.: 3a10001 number : 3a10002-------------------Number: 3a10001 

Certificate object with ID 65 already exists in session, so Session.get ( Certificate.class, 65); Query statements are not sent



Hibernate's 7.one2many two-way

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

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.