हाइबरनेट के लिए नया।कई लोगों को हाइबरनेट करें - fetch विधि उत्सुक बनाम आलसी
मेरे पास कई समूह के लिए उपयोगकर्ता समूह है। तीन टेबल: उपयोगकर्ता, समूह और उपयोगकर्ता समूह मैपिंग तालिका।
संस्थाओं:
@Entity
@Table(name = "user")
public class User {
@Id
@Column (name = "username")
private String userName;
@Column (name = "password", nullable = false)
private String password;
@ManyToMany(cascade = {CascadeType.ALL}, fetch = FetchType.EAGER)
@JoinTable(name="usergroup",
joinColumns={@JoinColumn(name="username")},
inverseJoinColumns={@JoinColumn(name="groupname")})
private Set<Group> userGroups = new HashSet<Group>();
... setter and getters
@Entity
@Table(name = "group")
public class Group {
@Id
@Column(name = "groupname")
private String groupName;
@Column(name = "admin", nullable = false)
private String admin;
@ManyToMany(mappedBy = "userGroups", fetch = FetchType.EAGER)
private Set<User> users = new HashSet<User>();
... setter and getters
सूचना है कि समूह इकाई में मैं विधि उत्सुक लाने उपयोग कर रहा हूँ। अब, जब मैं अपने डीएओ फोन कर रहा हूँ निम्नलिखित मानदंड का उपयोग कर प्रणाली में सभी समूहों पुनर्प्राप्त करने के लिए:
Criteria criteria = session.createCriteria(Group.class);
return criteria.list();
मैं mappgin तालिका (usergroup) से सभी पंक्तियों को हो रही है के बजाय हो रही वास्तविक समूहों की संख्या ...
उदाहरण के लिए अगर मैं समूह तालिका में उपयोगकर्ता तालिका
username password
-----------------
user1 user1
user2 user2
में है
groupname admin
---------------
grp1 user1
grp2 user2
usergroup तालिका में
username groupname
------------------
user1 grp1
user2 grp2
user1 grp2
user2 grp1
परिणाम निम्न सूची होगा - {grp1, grp2, grp2, grp1}
बजाय{grp1, grp2}
अगर मैं बदल समूह इकाई में लाज़ी के लिए fetch विधि मुझे सही परिणाम मिल रहे हैं लेकिन हाइबरनेट मुझे किसी अन्य स्थान पर LazyException फेंकता है ...
कृपया सहायता करें कि f ईटीएच विधि का उपयोग करना चाहिए और क्यों?
धन्यवाद!
बहुत विस्तृत उत्तर के लिए धन्यवाद !! आपने बहुत मदद की :) –
बहुत अच्छी व्याख्या। उत्सुकता केवल तभी उपयोग की जानी चाहिए जब इसकी अपेक्षा की जाती है और पूरे एप्लिकेशन में वास्तव में आवश्यकता होती है। –