我正在尝试一个简单的休眠填充数据库示例。有两个POJO的Employee和Address。当我尝试使用带参数的Employee和Address构造函数来创建两个实例时,抛出了错误could not get constructor for org.hibernate.persister.entity.singletableentitypersister
,但属性访问器方法运行良好。为什么会出现错误?
好的,因为我现在没有堆栈跟踪,所以我将重新表述我的问题:与休眠中的构造方法相比,属性访问器方法更受欢迎吗?
员工POJO:
package many2one;
public class Employee {
public int id;
public String firstName;
public String lastName;
public int salary;
public Address address;
public Employee(){}
public Employee(String firstName,String lastName,int salary,Address address){
this.firstName = firstName;
this.lastName = lastName;
this.salary = salary;
this.address = address;
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getFirstName(){
return firstName;
}
public void setFirstName(String fname){
this.firstName = fname;
}
public String getLastName(){
return lastName;
}
public void setLastName(String lname){
this.lastName = lname;
}
public int getSalary(){
return salary;
}
public void setSalary(int salary){
this.salary = salary;
}
public Address getAddress(){
return address;
}
public void setAddress(Address address){
this.address = address;
}
@Override
public String toString(){
return id+","+firstName+","+lastName+","+salary+","+address.getStreetName()+","+address.getCityName()+","+address.getStateName()+","+address.getZipcode();
}
}
地址POJO:
package many2one;
public class Address {
public int id;
public String streetName;
public String cityName;
public String stateName;
public String zipcode;
public Employee employee;
public Address(){
}
public Address(String sname,String cname,String statename,String zipcode){
this.streetName = sname;
this.cityName = cname;
this.stateName = statename;
this.zipcode = zipcode;
}
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getStreetName(){
return streetName;
}
public void setStreetName(String streetname){
this.streetName = streetname;
}
public String getCityName(){
return cityName;
}
public void setCityName(String cname){
this.cityName = cname;
}
public String getStateName(){
return stateName;
}
public void setStateName(String statename){
this.stateName = statename;
}
public String getZipcode(){
return zipcode;
}
public void setZipcode(String zipcode){
this.zipcode = zipcode;
}
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this.employee = employee;
}
}
`
最佳答案
您的类应具有不带任何参数的默认公共构造函数。这是使用Hibernate时对构造函数的唯一约束。
至于例外情况,您可能缺少某个字段的设置器,或者这些设置器未遵循Hibernate期望的约定。但这只能在您提供完整堆栈跟踪的情况下才能确认。
是属性访问器方法而不是构造函数中的首选方法
冬眠?
你是什么意思?如果您的意思是属性方法是可选的,那么答案是否定的。 (首先可能是例外的原因之一)