Reputation: 186
Why the below code is getting error but the similar code is working in my project.Why I am getting the invalid table column for the fields.
Entities: Address
public class Address implements Serializable {
private int mNumber;
private String mName;
public int getNumber() {
return mNumber;
}
public Address() {
// TODO Auto-generated constructor stub
}
public Address(int pNumber, String pName) {
// TODO Auto-generated constructor stub
System.out.println("hello");
}
public void setNumber(int pNumber) {
mNumber = pNumber;
}
public String getName() {
return mName;
}
public void setName(String pName) {
mName = pName;
}
}
Student
public class Student {
private String mSname;
private Address id;
public String getSname() {
return mSname;
}
public void setSname(String pSname) {
mSname = pSname;
}
public Address getId() {
return id;
}
public void setId(Address pId) {
id = pId;
}
}
Mapping Files:
Student.hbm.xml
<hibernate-mapping>
<class name="com.hibernate.compositeid.Student" table="student24">
<composite-id name="id" class="com.hibernate.compositeid.Address">
<key-property name="Number" column="number" />
<key-property name="Name" column="name" />
</composite-id>
<property name="Sname" column="sname" />
</class>
</hibernate-mapping>
Test class:
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
SessionFactory sf = new Configuration().configure(
"com/hibernate/compositeid/hibernate.cfg.xml")
.buildSessionFactory();
Session ss = sf.openSession();
Address ad = new Address();
ad.setName("krishnanagar");
ad.setNumber(1234);
Student s = new Student();
s.setSname("nani");
s.setId(ad);
ss.save(s);
ss.beginTransaction().commit();
}
}
Upvotes: 2
Views: 66
Reputation: 33
if you are using mysql database use the below annotation configuration otherwise change strategy="incerment"
public class Address implements Serializable {
@Id
@GenericGenerator(name = "j", strategy = "increment")
@GeneratedValue(generator = "j")
@Column(name = "number")
private int mNumber;
@Column(name = "name")
private String mName;
public int getNumber() {
return mNumber;
}
public Address() {
// TODO Auto-generated constructor stub
}
public Address(int pNumber, String pName) {
// TODO Auto-generated constructor stub
System.out.println("hello");
}
public void setNumber(int pNumber) {
mNumber = pNumber;
}
public String getName() {
return mName;
}
public void setName(String pName) {
mName = pName;
}
}
Upvotes: 0
Reputation: 962
There is the problem in the attributes name in the Student.hbm.xml file. It should be as follows:
<hibernate-mapping>
<class name="com.hibernate.compositeid.Student" table="student24">
<composite-id name="id" class="com.hibernate.compositeid.Address">
<key-property name="mNumber" column="number" />
<key-property name="mName" column="name" />
</composite-id>
<property name="mSname" column="sname" />
</class>
</hibernate-mapping>
I hope the column here you provided is same as that in your DB.
Upvotes: 1