2012-01-27 9 views
5

पर सिंटैक्स त्रुटि मैं हाइबरनेट का उपयोग कर रहा हूं और "उपयोगकर्ता" नामक एक सतत कक्षा है। चूंकि यह एक कीवर्ड है, मैं एक अलग नाम के साथ @Entity विशेषता चिह्नित (मैंने देखा है, उदाहरण के लिए, इस सवाल: Unable to use table named "user" in postgresql hibernate)त्रुटि: "उपयोगकर्ता"

हालांकि, मैं अभी भी मुसीबत में पड़ क्योंकि इस वर्ग के एक और फैली हुई है, और यह लग रहा है जैसे हाइबरनेट अभी भी एक स्तंभ नाम के रूप में "उपयोगकर्ता" का उपयोग करने की कोशिश कर रहा है और में गड़बड़ हो रही है:

@Entity(name = "XonamiUser") 
public class User extends PropertyContainer { 
    ... 

और

@MappedSuperclass 
public abstract class PropertyContainer implements Serializable { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    protected long key; 
    /** tags */ 
    @ElementCollection 
    protected Set<String> tags; 

    @ElementCollection 
    protected Set<String> searchList; 
    ... 

मेरे अन्य वर्गों कि PropertyContainer विस्तार ठीक से काम करने लगते हैं।

क्या यह हाइबरनेट में एक बग है? क्या रिफैक्टरिंग के इस छोटे से पास कुछ रास्ता है? धन्यवाद!

यहाँ त्रुटियों मैं दिखाई दे रही है (थोड़ा साफ) कर रहे हैं:

WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601 
ERROR org.hibernate.util.JDBCExceptionReporter - Batch entry 0 insert into user_search_list (user, search_list) values ('1', 'bjorn') was aborted. Call getNextException to see the cause. 
WARN org.hibernate.util.JDBCExceptionReporter - SQL Error: 0, SQLState: 42601 
ERROR org.hibernate.util.JDBCExceptionReporter - ERROR: syntax error at or near "user" 
    Position: 31 
+0

@TJ, मैंने त्रुटियों को जोड़ा जो मुझे विश्वास दिलाता है कि यह अभी भी कॉलम नाम का उपयोग कर रहा है। –

उत्तर

1

अंत में, मैंने कक्षा उपयोगकर्ता को XonamiUser पर दोबारा प्रतिक्रिया दी। यह वही नहीं था जो मैं चाहता था, लेकिन यह बहुत अच्छा काम किया।

1

मैं थोड़ा उलझन में आप एक स्तंभ या तालिका नामित उपयोगकर्ता की बात कर रहे ... आप @Table उपयोग कर सकते हैं - एनोटेशन जेपीए में इकाई के लिए तालिका नाम सेट करने के लिए:

@Entity 
@Table(name = "XonamiUser") 
public class User extends PropertyContainer { 
+0

मुझे "असफल: तालिका user_search_list बनाएं (उपयोगकर्ता int8 शून्य, search_list varchar (255)) ... ERROR org.hibernate.tool.hbm2ddl.SchemaUpdate - त्रुटि:" उपयोगकर्ता "पर या उसके पास वाक्यविन्यास त्रुटि –

1

Hibernate reference manual कैसे तालिका संग्रह के तत्वों पकड़ इस्तेमाल नाम को परिभाषित करने के दिखा एक उदाहरण है। और ऐसा करने के लिए उपयोगकर्ता इकाई का उपयोग करना होता है, और कॉलम को उपयोगकर्ता के बजाय user_id के रूप में परिभाषित करने के लिए होता है।

यह मानचित्रण ठीक होना चाहिए, आपके मामले के लिए:

@ElementCollection 
@CollectionTable(name = "user_search_list", 
       joinColumns = @JoinColumn(name = "user_id")) 
@Column(name = "search_list") 
protected Set<String> searchList; 
+0

यह मानता है कि उपयोगकर्ता एकमात्र वर्ग है जो प्रॉपर्टीकॉन्टेनर को उप-वर्गीकृत करता है, है ना? –

+0

नहीं। हाइबरनेट नाम "कॉलम" नामक इकाई में शामिल होता है क्योंकि यह "उपयोगकर्ता" नामक इकाई में शामिल होता है। –

+0

लेकिन खोजसूची PropertyContainer से संबंधित है, इसलिए उपयोगकर्ता, और अन्य वर्ग इसे प्राप्त करते हैं अगर मैं हाइबरनेट को बताता हूं कि इसे user_search_list नाम का उपयोग करना चाहिए, तो क्या यह उस वर्ग का उपयोग करने वाले सभी वर्गों के लिए उपयोग करने का प्रयास नहीं करेगा? –

30

user PostgreSQL में एक reserved keyword है। इसे केवल quoted identifier के रूप में अनुमति है।

आपको इस INSERT कमांड में उद्धृत "user" का उपयोग करने के लिए हाइबरनेट को मजबूर करना होगा।

मैं विशेषज्ञ हाइबरनेट नहीं हूं लेकिन शायद यह Hibernate saving User model to Postgres मदद करेगा?

+0

हां, मेरे मूल पोस्ट में जो प्रश्न मैंने लिंक किया है, वही बिंदु बनाता है। यही कारण है मैंने @Entity (name = "XonamiUser") एनोटेशन का उपयोग किया। –

+0

मेरी त्रुटि ERROR की तरह sth थी: वाक्यविन्यास त्रुटि या उसके पास। हाइबरनेट पो की वास्तविक त्रुटि को ओवरराइट करता है आरक्षित शब्द के लिए stgresql। इसे समझने में मुझे कुछ समय लगा। –

+0

@BjornRoche मुझे लगता है कि प्रश्न आपके प्रश्न के समान है .. क्या आप इस पर मेरी मदद कर सकते हैं ... http: // stackoverflow।com/प्रश्न/42224949/अपवाद-संगठन-PostgreSQL-util-psqlexception-त्रुटि वाक्य रचना-त्रुटि पर या पास-सी? noredirect = 1 # comment71610583_42224949 – dhS

संबंधित मुद्दे