2012-02-27 7 views
5

हैबर्ननेट में मेरे पहले ऐप पर काम करते समय।टाइपमिस्मैच अपवाद, प्रदान की गई आईडी गलत प्रकार

org.hibernate.TypeMismatchException: वर्ग org.cw.form.User के लिए गलत प्रकार का आईडी प्रदान की डीबी से एक उपयोगकर्ता वस्तु प्राप्त करने का प्रयास करते समय मैं निम्नलिखित अपवाद हो रही है। अपेक्षित: कक्षा java.lang.Integer, कक्षा java.lang.String org.hibernate.event.def.DefaultLoadEventListener.onLoad (DefaultLoadEventListener.java:109) org.hibernate.impl.SessionImpl.fireLoad (सत्र Iplpl पर) जावा: 906) org.hibernate.impl.SessionImpl.load (SessionImpl.java:823) org.hibernate.impl.SessionImpl.load पर पर (SessionImpl.java:816)

मैं बनाया है निम्नलिखित postgreSQL के साथ USERS तालिका:

SEQUENCE user2_id_seq बनाएं; तालिका उपयोगकर्ता बनाएं (आईडी पूर्णांक पूर्ण डिफ़ॉल्ट अगलीवाल ('user2_id_seq'), user_name varchar (45) न्यूल अद्वितीय, पासवर्ड वर्कर (45) न्यूल, ईमेल वर्कर (45) नहीं पूर्ण, प्राथमिक कुंजी (आईडी)) ;

और उपयोगकर्ता इकाई इस तरह के रूप में परिभाषित किया जाता है:

@Entity @Table (नाम = "उपयोगकर्ता") सार्वजनिक वर्ग उपयोगकर्ता {

@Id 
@Column(name="ID") 
@GeneratedValue(strategy= GenerationType.IDENTITY) 
private Integer id; 

@Column(name="USER_NAME", unique = true) 
private String userName; 

@Column(name="PASSWORD") 
private String password; 

@Column(name="EMAIL") 
private String email; .. all the getters and setters... 

मैं मैं कुछ याद आ रही है ?

उत्तर

5

यदि आप दिखाएंगे कि आप उपयोगकर्ताओं को कैसे पुनर्प्राप्त करते हैं तो यह जवाब देना आसान होगा।

Provided id of the wrong type for class org.cw.form.User. 
Expected: class java.lang.Integer, got class java.lang.String 

मुझे लगता है कि आप सही प्रकार (पूर्णांक) के बजाय स्ट्रिंग प्रदान कर रहे हैं:

String userID = "1"; //Should be Integer userID = 1 instead 
session.get(User.class, userID); 
+0

अरे यह काम किया। धन्यवाद। – special0ne

2

मैं वास्तव में अगर यह आपकी समस्या का समाधान करेंगे पता नहीं है, लेकिन जब से तुम दृश्यों का उपयोग कर रहे db तरफ आईडी उत्पन्न करने के लिए, मुझे लगता है कि आप एक अनुक्रम जनरेटर का उपयोग करना चाहिए:

@Id 
@Column(name="ID") 
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="user2_id_seq") 
private Integer id; 

कृपया देखें विवरण के लिए यह पोस्ट: Hibernate sequence on oracle, @GeneratedValue(strategy = GenerationType.AUTO)

2
public User findClientByUsername(String login) {   
     Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class); 
     criteria.add(Restrictions.like("userName", login)); 
     return (User) criteria.uniqueResult(); 
    } 

अपनी समस्या का समाधान करने के लिए संदेश के आधार पर।

1

मेरे पास एक अलग अपराधी था जो इस मुद्दे को बना रहा था: मैंने एक और इकाई के भंडार की प्रतिलिपि बनाई थी जिसने प्राथमिक कुंजी प्रकार के रूप में स्ट्रिंग का उपयोग किया था।

तो मैं

interface MyEntityRepository extends CrudRepository<MyEntity, String> { 

जो त्रुटि संदेश का उत्पादन के साथ संयोजन में

class MyEntity implements Serializable { 

    @Id 
    Integer id 

था।

बस स्ट्रिंग से इंटीजर तक इंटरफ़ेस प्रकार को बदलने से मेरे लिए समस्या हल हो गई।