হাইবারনেটের একটি সাধারণ সমস্যা যা আমি মনে করি তার মুখোমুখি হয়েছি, তবে এটি সমাধান করতে পারছে না (হাইবারনেট ফোরামগুলি অপ্রচারনীয় হওয়ার কারণে অবশ্যই সহায়তা করে না)।
আমার একটি সহজ ক্লাস রয়েছে যা আমি চালিয়ে যেতে চাই তবে তা পেতে থাকুন:
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)
এটি সমাধান করে না
সমাধান করা : ডাটাবেস পুনরুদ্ধার করা সমস্যার সমাধান করে
GenerationType
মধ্যে @GeneratedValue
থেকে IDENTITY
করতে AUTO
এবং এটা আমার জন্য কাজ করেন। এছাড়াও, আপনি মাইএসকিউএলে স্বতঃবৃদ্ধি সম্পত্তি সেট করতে পারেন।