为什么以下代码出错,但类似的代码在我的项目中有效。为什么我得到字段的无效表列。
实体: 地址
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;
}
}
学生
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;
}
}
映射文件:
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>
测试类:
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();
}
}
答案 0 :(得分:1)
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="mNumber" column="number" />
<key-property name="mName" column="name" />
</composite-id>
<property name="mSname" column="sname" />
</class>
</hibernate-mapping>
我希望您提供的专栏与您的数据库中的专栏相同。
答案 1 :(得分:0)
如果您使用的是mysql数据库,请使用以下注释配置,否则更改策略=&#34; incerment&#34;
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;
}
}