मुझे लगता है कि मुझे लगता है कि हाइबरनेट के साथ एक सरल समस्या है, लेकिन इसे हल नहीं किया जा सकता है (हाइबरनेट फोरम अप्राप्य है जो निश्चित रूप से मदद नहीं करता है)।
मेरे पास एक साधारण वर्ग है जिसे मैं जारी रखना चाहता हूं, लेकिन प्राप्त करना जारी रखें:
SEVERE: Field 'id' doesn't have a default value
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not insert: [hibtest.model.Mensagem]
at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:103)
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:91)
[ a bunch more ]
Caused by: java.sql.SQLException: Field 'id' doesn't have a default value
[ a bunch more ]
संबंधित वर्ग के लिए प्रासंगिक कोड है:
package hibtest.model;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Mensagem {
protected Long id;
protected Mensagem() { }
@Id
@GeneratedValue
public Long getId() {
return id;
}
public Mensagem setId(Long id) {
this.id = id;
return this;
}
}
और वास्तविक रनिंग कोड केवल सादा है:
SessionFactory factory = new AnnotationConfiguration()
.configure()
.buildSessionFactory();
{
Session session = factory.openSession();
Transaction tx = session.beginTransaction();
Mensagem msg = new Mensagem("YARR!");
session.save(msg);
tx.commit();
session.close();
}
मैंने GeneratedValue
एनोटेशन के भीतर कुछ "रणनीतियों" की कोशिश की, लेकिन यह अभी काम नहीं करता है। प्रारंभिक id
मदद भी नहीं करता है! (जैसे Long id = 20L
)।
क्या कोई प्रकाश डाल सकता है?
संपादित 2: की पुष्टि की: के साथ खिलवाड़ @GeneratedValue(strategy = GenerationType.XXX)
यह हल नहीं करता है
SOLVED: डेटाबेस को पुनःप्राप्त करने से समस्या हल हो गई
GenerationType
में @GeneratedValue
से IDENTITY
करने के लिए AUTO
और यह मेरे लिए काम किया। इसके अलावा, आप MySQL में ऑटो इंक्रीमेंट प्रॉपर्टी सेट कर सकते हैं।