Hibernate无效表列

时间:2016-08-20 06:18:01

标签: hibernate nhibernate-mapping hibernate-criteria

为什么以下代码出错,但类似的代码在我的项目中有效。为什么我得到字段的无效表列。

实体: 地址

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();
    }

}

2 个答案:

答案 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;
            }
        }