مشخصات مقاله
درس 24 : آموزش آدرس دهی متغیرهای Set در مجموعه های Hibernate
آموزش آدرس دهی متغیرهای Set در مجموعه های Hibernate :
اگر کلاس Persistent Class شما شامل متغیرهای Set objects می باشد، می توانید از المنت Set در فایل آدرس دهی mapping file برای map متغیر Set استفاده کنید.
المنت Set نیازی به index گذاری ندارد. متغیرهای Set و List کاملا شبیه هم هستند، با این تفاوت که متغیرهای Set فقط مقادیر یکتا و غیر تکراری (Unique) را در اعضای خود نگهداری می کند.
به وسیله کد زیر، می توانید یک متغیر Set را تعیین و پیاده سازی کنید :
1 2 3 4 5 6 7 8 9 10 | < class name = "com.javatpoint.Question" table = "q102" > ... < set name = "answers" table = "ans102" > < key column = "qid" ></ key > < element column = "answer" type = "string" ></ element > </ set > ... </ class > < button ></ button > |
مثال عملی آموزش آدرس دهی متغیر Set در مجموعه ها Hibernate :
در مثال این درس قصد داریم تا نحوه آدرس دهی mapping متغیرهای Set را به طور کامل در Hibernate آموزش دهیم.
در این مثال، متغیر Set مقادیر (Values) را نگهداری می کند نه رفرنس های entity. به همین دلیل است که ما از element به جای one-to-many استفاده می کنیم.
1)ایجاد کلاس Persistent Class :
در مرحله اول اقدام به ایجاد کلاس Persistent می کنیم که خواص لازم برای کلاس از جمله Set را تعیین می کند :
1 2 3 4 5 6 7 8 9 10 11 12 13 | package com.javatpoint; import java.util.Set; public class Question { private int id; private String qname; private Set<string> answers; //getters and setters } </string><button></button> |
2)ایجاد فایل آدرس دهی mapping file برای فایل Persistent :
در این مرحله، ما کلاس question.hbm.xml را برای تعیین list ایجاد می کنیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <!--?xml version='1.0' encoding='UTF-8'?--> < hibernate-mapping > < class name = "com.javatpoint.Question" table = "q102" > < id name = "id" > < generator class = "increment" ></ generator > </ id > < property name = "qname" ></ property > < set name = "answers" table = "ans102" > < key column = "qid" ></ key > < element column = "answer" type = "string" ></ element > </ set > </ class > </ hibernate-mapping > < button ></ button > |
3)ایجاد فایل تنظیمات Configuration file :
در مرحله بعدی، فایل تنظیمات برنامه را ایجاد می کنیم که اطلاعات لازم درباره پایگاه داده و فایل آدرس دهی mapping file را شامل می شود.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!--?xml version='1.0' encoding='UTF-8'?--> <!-- Generated by MyEclipse Hibernate Tools. --> < hibernate-configuration > < session-factory > < property name = "hbm2ddl.auto" >update</ property > < property name = "dialect" >org.hibernate.dialect.Oracle9Dialect</ property > < property name = "connection.url" >jdbc:oracle:thin:@localhost:1521:xe</ property > < property name = "connection.username" >system</ property > < property name = "connection.password" >oracle</ property > < property name = "connection.driver_class" >oracle.jdbc.driver.OracleDriver</ property > < mapping resource = "question.hbm.xml" ></ mapping > </ session-factory > </ hibernate-configuration > < button ></ button > |
4)ایجاد کلاس لازم جهت نگهداری اطلاعات برنامه :
در کلاس زیر کد لازم جهت نگهداری اطلاعات کلاس question را تعیین کرده ایم :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package com.javatpoint; import java.util.ArrayList; import org.hibernate.*; import org.hibernate.cfg.*; public class StoreData { public static void main(String[] args) { Session session= new Configuration().configure( "hibernate.cfg.xml" ) .buildSessionFactory().openSession(); Transaction t=session.beginTransaction(); HashSet<string> set1= new HashSet<string>(); set1.add( "java is a programming language" ); set1.add( "java is a platform" ); HashSet<string> set2= new HashSet<string>(); set2.add( "Servlet is an Interface" ); set2.add( "Servlet is an API" ); Question question1= new Question(); question1.setQname( "What is Java?" ); question1.setAnswers(set1); Question question2= new Question(); question2.setQname( "What is Servlet?" ); question2.setAnswers(set2); session.persist(question1); session.persist(question2); t.commit(); session.close(); System.out.println( "success" ); } } </string></string></string></string><button></button> |
آموزش نحوه خواندن و دریافت fetch اطلاعات :
در این بخش نیز از زبان HQL برای دریافت اطلاعات کلاس Question از جمله رکوردهای answers استفاده می کنیم. در این مورد، برنامه اطلاعات را از دو جدول که به صورت کد مستقل functional dependent به هم متصل هستند، استخراج می کند :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | package com.javatpoint; import java.util.*; import org.hibernate.*; import org.hibernate.cfg.*; public class FetchData { public static void main(String[] args) { Session session= new Configuration().configure( "hibernate.cfg.xml" ) .buildSessionFactory().openSession(); Query query=session.createQuery( "from Question" ); List<question> list=query.list(); Iterator<question> itr=list.iterator(); while (itr.hasNext()){ Question q=itr.next(); System.out.println( "Question Name: " +q.getQname()); //printing answers Set<string> set=q.getAnswers(); Iterator<string> itr2=set.iterator(); while (itr2.hasNext()){ System.out.println(itr2.next()); } } session.close(); System.out.println( "success" ); } } </string></string></question></question><button></button> |