2012-01-06 14 views
8

डेटाबेस:जेपीए तालिका "अनुक्रम" मौजूद नहीं है

user_account 
id(pk) 
email 
password 
... 

user_detail 
id(pk fk) 
name_first 
name_last 
... 

इकाई

@Entity 
@Table(name="user_account")  
@SecondaryTable(name="user_detail", [email protected]()) 
public class UserAccount implements Serializable{ 
    private static final long serialVersionUID = -2606506548742732094L; 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    private Integer id; 
    private String email; 
    private String password; 
    private String tab; 
    private String shortcut; 
    private String setting; 
    private Integer role; 

    @Column(table="user_detail", name="name_first") 
    private String nameFirst; 
    @Column(table="user_detail", name="name_last") 
    private String nameLast; 
    @Column(table="user_detail") 
    private String occupation; 
    @Column(table="user_detail") 
    @Temporal(TemporalType.DATE) 
    private Date birth; 
    .... 
} 

कार्रवाई

try{ 
     EntityTransaction transaction = em.getTransaction(); 
     transaction.begin(); 
     em.persist(currentUser); 

     transaction.commit(); 
    } catch (Exception e){ 
    } 

त्रुटि

INFO: [EL Warning]: 2012-01-06 18:45:46.77--ClientSession(17472935)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Internal Exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'mazedb.sequence' doesn't exist Error Code: 1146 Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [2 parameters bound] Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")

INFO: ERROR: Internal Exception: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table 'mazedb.sequence' doesn't exist Error Code: 1146 Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ? bind => [2 parameters bound] Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")

मैं दूसरी तरह के आसपास की कोशिश की, दो अलग अलग @PrimaryKeyJoinColumn द्वारा विलय कर दिया संस्थाओं होने, लेकिन मैं एक ही त्रुटि मिली।

+0

ठीक है, संदेश कहता है कि आपको अनुक्रम तालिका की आवश्यकता है। आप इसे क्यों नहीं बनाते? –

+0

लेकिन अगर मुझे वहां नहीं माना जाता है तो मुझे इस टेबल की आवश्यकता क्यों होगी? – TGM

उत्तर

14

यदि EclipseLink इस तालिका तक पहुंचने का प्रयास करता है, तो इसका मतलब है कि यह वहां होना चाहिए। GenerationType.AUTO का अर्थ है कि EclipseLink आपके डेटाबेस (MySQL) के लिए सबसे उपयुक्त पीढ़ी का प्रकार चुनता है। इस मामले में, विकल्प एक टेबल-आधारित जेनरेटर का उपयोग करना है, जिसके लिए एक टेबल की आवश्यकता होती है। http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/GeneratedValue देखें।

यदि आप इस रणनीति का उपयोग नहीं करना चाहते हैं, तो दूसरा चुनें।

+0

दिया गया लिंक मर चुका है। –

5

इस तरह की चीज को सौ बार करने के बावजूद मुझे यह त्रुटि कभी नहीं मिली थी। मैंने पाया क्योंकि मैं persistence.xml में तालिका बनाने के लिए एक हाइबरनेट संपत्ति थी इस त्रुटि था, लेकिन उपयोग कर रहा था EclipseLink:

यह था:

<property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> 
    <!-- or just value="create-tables" --> 
:

<property name="hibernate.hbm2ddl.auto" value="create"/> 

मैं त्रुटि को ठीक करने के लिए निम्न करने के लिए परिवर्तित

+0

मेरे लिए काम किया, हालांकि मेरे पास persistence.xml में परिभाषित संपत्ति का पहला नहीं था। सुझाव संपत्ति जोड़ने से अपवाद दूर हो गया। –

-1

कॉन्फ़िगरेशन फ़ाइल में, org.hibernate.dialect.oracle10gdialect लाइन भुला दी जा सकती है। दरअसल, org.hibernate.dialect.mysqldialect होना चाहिए।

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