मैं एक जेपीए वस्तु जो इस तरह की एक बहुत-से-अनेक संबंध नहीं है है:मैं जॉइन टेबल से प्रविष्टियों को हटाने के लिए जेपीक्यूएल का उपयोग कैसे करूं?
@Entity
public class Role {
//...
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(
name="RolePrivilege",
joinColumns=
@JoinColumn(name="role", referencedColumnName="ID"),
inverseJoinColumns=
@JoinColumn(name="privilege", referencedColumnName="ID")
)
private Set<Privilege> privs;
}
वहाँ RolePrivilege के लिए एक जेपीए वस्तु नहीं है, तो मुझे यकीन है कि कैसे हटाने के लिए एक JPQL क्वेरी लिखने के लिए नहीं कर रहा हूँ एक भूमिका वस्तु के निजी क्षेत्र से प्रविष्टियां। उदाहरण के लिए, मैंने यह कोशिश की है, लेकिन यह काम नहीं करता है। यह शिकायत करता है कि Role.privs मैप नहीं किया गया है।
DELETE FROM Role.privs p WHERE p.id=:privId
मुझे यकीन नहीं है कि और क्या प्रयास करना है। मैं निश्चित रूप से सिर्फ एक देशी क्वेरी लिख सकता हूं जो रोल तालिका में शामिल हो जाता है। लेकिन, मुझे चिंता है कि ऐसा करने से स्थानीय रूप से कैश किए गए ऑब्जेक्ट्स के साथ बुरी तरह से बातचीत होगी जो देशी क्वेरी द्वारा अपडेट नहीं की जाएगी।
क्या इस तरह की जॉइन टेबल से प्रविष्टियों को निकालने के लिए जेपीक्यूएल लिखना भी संभव है? यदि नहीं, तो मैं केवल सभी भूमिका वस्तुओं को लोड कर सकता हूं और प्रत्येक के निजी संग्रह से प्रविष्टियों को हटा सकता हूं और फिर प्रत्येक भूमिका को कायम रख सकता हूं। लेकिन ऐसा करने के लिए मूर्खतापूर्ण लगता है कि यदि एक साधारण जेपीक्यूएल क्वेरी एक बार में यह सब करेगी।