Java hibernate - שמירת נתונים

liron50

New member
Java hibernate - שמירת נתונים

שלום,
הנושא הזה די חדש לי. ולא בטוח שהבנתי משהו-
כשאני רוצה לעדכן או להכניס מספר נתונים האם זה חייב להתבצע בלולאה?
זה נראה מאד לא יעיל, אם יש לי כמה מאות רשומות לבצע save עבור כל רשומה.

אני יודע שאם Connection אפשר לייצר PreparedStatement ואז להכניס מספר רב של רשומות בפקודה אחת.
אין משהו דומה עם hibernate?

תודה
 

Guy Yafe

New member
כמה אפשרויות:

אם כל הנתונים הם חלק מרשימה בתוך אובייקט אחד (יחיד לרבים), החיים קלים ואתה לא צריך לעשות כלום חוץ מלדאוג לCASCADE נכון.
אם כל נתון הוא אובייקט נפרד, אין בעיה לעשות לכל אחד SAVE בנפרד (עדיף PERSIST), רק דאג שכל הפעולות האלה תהיינה באותה טראנזאקציה, וכך תהיה שמירה אחת לבסיס הנתונים.
שים לב שכדי לא לקבל OutOfMemoryException, אתה צריך לשלוח אותם בקבוצות ולעשות מדי פעם FLUSH:
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/batch.html
אפשרות אחרת היא לדחוף הכל לשאילת HQL אבל זה פחות מומלץ.
&nbsp
 

liron50

New member
תודה, אבל עדיין לא הבנתי

למה אין בעיה לעשות SAVE בנפרד לכל אובייקט?
הרי כל Save זה פקודה ל-DB, וזו אמורה להיות פעולה יקרה יחסית.
או שמא, הפניה ל-DB נעשית רק בפקודת ה-flush או ה-comit ?
 

Guy Yafe

New member
SAVE לא שומר מיידית לDB. אולי.

זו אחת הסיבות שעדיף להשתמש בPERSIST במקום בSAVE. כל עוד אתה בתוך טראנזאקציה, PERSIST (או SAVE) רק יגידו לSESSION שיש פה אלמנט שצריך להישמר. הכל יישמר לDB רק ביחד ברגע שתעשה COMMIT או כשתעשה מדי פעם FLUSH.
&nbsp
אם אתה עושה SAVE מחוץ לטראנזאקציה, הגישה לDB תהיה מיידית.
&nbsp
לקריאה נוספת:
http://www.journaldev.com/3481/hibe...-vs-merge-vs-update-explanation-with-examples
&nbsp
 

liron50

New member
תודה, עכשיו זה יותר ברור

אני אמשיך לקרוא בקישור.
 
למעלה