کانال بله, جهت پشتیبانی و اطلاع رسانی کانال بله, جهت پشتیبانی و اطلاع رسانی
عضویت

درس 21 : آموزش آدرس دهی One to Many در Hibernate با استفاده از مثال List

آموزش آدرس دهی به روش One to Many در Hibernate با استفاده از مثال List در فایل xml :

اگر کلاس Persistant Class شما دارای اشیای لیست آدرس دهی (object list) باشد که حاوی رفرنس های entity هستند، بایستی از روش one-to-many برای آدرس دهی (map) المنت های لیست دار استفاده کنیم.
در این مثال، ما از سناریو انجمن استفاده می کنیم که هر سوال می تواند چندین جواب داشته باشد. دیاگرام این سناریو در مثال زیر نشان داده شده است :

آموزش آدرس دهی به روش One to Many در Hibernate با استفاده از مثال List
در مواردی همانند مثال فوق، برای هر سوال ممکن است چندین جواب وجود داشته باشد و هر جواب هم اطلاعات مختص به خود را دارد. برای همین دلیل ما از List جهت کلاس persistant Class استفاده کردیم.
(شامل رفرنس های لازم به کلاس Answer) تا بتوانند جانشین مجموعه ای از جواب ها باشد. کد زیر، کد کلاس Persistant Class را نشان می دهد که حاوی اشیای لیست دار یا list objects بوده که خود شامل اشیای کلاس Answer می باشد :

 
package com.javatpoint;  
  
import java.util.List;  
  
public class Question {  
private int id;  
private String qname;  
private List answers;  
//getters and setters  
  
}   
            

از طرف دیگر، کلاس Answer که کد آن به صورت زیر است، خود حاوی اطلاعاتی مثل id، answername، postedBy و ... می باشد :

 
package com.javatpoint;  
  
public class Answer {  
private int id;  
private String answername;  
private String postedBy;  
//getters and setters  
  
}  
}   
            

همچنین کلاس Question دارای اشیای لیست دار list objects می باشد که حاوی رفرنس های entity هستند (برای مثال رفرنس به شی کلاس Answer). در این چنین مواردی، بایستی از روش one-to-many برای آدرس دهی (map) این object استفاده کنیم. در کد زیر نحوه آدرس دهی نشان داده شده است :

 
  
            
            
            
  
            

مثال آدرس دهی (mapping) با روش one to many در Hibernate با استفاده از List :

در این مثال، قصد داریم تا روش کامل آدرس دهی (mapping) یک list که حاوی رفرنس های entity می باشد را آموزش دهیم. برای این منظور مراحل زیر را انجام دهید :

1)ایجاد کلاس Persistant Class :
کلاس Persistant Class خواص (Properties) لازم جهت کلاس از جمله List را به صورت زیر تعیین می کند :

کد فایل Question.java :

 
                package com.javatpoint;  
  
import java.util.List;  
  
public class Question {  
private int id;  
private String qname;  
private List answers;  
  
//getters and setters  
  
}  

            

کد فایل Answer.java

 
package com.javatpoint;  
  
public class Answer {  
private int id;  
private String answername;  
private String postedBy;  
//getters and setters  
  
}  
}  
                            

2)ایجاد فایل آدرس دهی (mapping) لازم جهت کلاس Persistant :
در این مرحله، ما فایل question.hbm.xml را برای تعیین list ایجاد کرده ایم. به صورت زیر :

  
  
  
  
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
            
  
            

3) ایجاد فایل پیکربندی اطلاعات Configuration File :
فایل زیر حاوی اطلاعات لازم جهت کار با database و فایل آدرس دهی mapping file است :

  
  
  
  
  
  
  
      
        update  
        org.hibernate.dialect.Oracle9Dialect  
        jdbc:oracle:thin:@localhost:1521:xe  
        system  
        oracle  
        oracle.jdbc.driver.OracleDriver  
      
      
  
  
            

4)ایجاد کلاس لازم جت نگهداری اطلاعات :
در کلاس زیر نیز اقدام به نگهداری اطلاعات کلاس question class خواهیم پرداخت :

  
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();  
      
    Answer ans1=new Answer();  
    ans1.setAnswername("java is a programming language");  
    ans1.setPostedBy("Ravi Malik");  
      
    Answer ans2=new Answer();  
    ans2.setAnswername("java is a platform");  
    ans2.setPostedBy("Sudhir Kumar");  
      
    Answer ans3=new Answer();  
    ans3.setAnswername("Servlet is an Interface");  
    ans3.setPostedBy("Jai Kumar");  
      
    Answer ans4=new Answer();  
    ans4.setAnswername("Servlet is an API");  
    ans4.setPostedBy("Arun");  
      
    ArrayList list1=new ArrayList();  
    list1.add(ans1);  
    list1.add(ans2);  
      
    ArrayList list2=new ArrayList();  
    list2.add(ans3);  
    list2.add(ans4);  
      
    Question question1=new Question();  
    question1.setQname("What is Java?");  
    question1.setAnswers(list1);  
      
    Question question2=new Question();  
    question2.setQname("What is Servlet?");  
    question2.setAnswers(list2);  
      
    session.persist(question1);  
    session.persist(question2);  
      
    t.commit();  
    session.close();  
    System.out.println("success");  
}  
}  
            

5)خروجی

آموزش آدرس دهی به روش One to Many در Hibernate با استفاده از مثال List

آموزش نحوه دریافت (fetch) اطلاعات لیست List :

در این بخش، ما از زبان HQL برای دریافت اطلاعات کلیه رکوردهای کلاس Question که حاوی answers نیز هستند، استفاده می کنیم. در این مثال، کد ما اطلاعات را از دو جدول کد به صورت functional depandant به هم متصل هستند، استخراج می کند.
در کلاس FetchData.java ، شی کلاس answer class را به صورت مستقیم در خروجی چاپ می کنیم. اما ما متد t.String() در کلاس Answer Class را که خواص answername و Poster name را بر می گرداند را بازنویسی کرده ایم. بنابراین، متد t.String() مقادیر answername و poster name را به جای idهای رفرنس ها در خروجی چاپ می کند.

فایل FetchData.java

  
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 list=query.list();  
      
    Iterator itr=list.iterator();  
    while(itr.hasNext()){  
        Question q=itr.next();  
        System.out.println("Question Name: "+q.getQname());  
          
        //printing answers  
        List list2=q.getAnswers();  
        Iterator itr2=list2.iterator();  
        while(itr2.hasNext()){  
            System.out.println(itr2.next());  
        }  
          
    }  
    session.close();  
    System.out.println("success");  
}  
}  
            

خروجی مثال هم به صورت زیر است :

آموزش آدرس دهی به روش One to Many در Hibernate با استفاده از مثال List

1395/07/11 2862 1044
رمز عبور : tahlildadeh.com یا www.tahlildadeh.com
نظرات شما

نظرات خود را ثبت کنید...