Hibernate无效的表列



为什么下面的代码得到错误,但类似的代码在我的项目中工作。为什么我得到无效的表列的字段。

实体:地址

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

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>

我希望这里您提供的列与您的DB中的列相同。

如果您使用的是mysql数据库,请使用下面的注释配置,否则更改strategy=" increment "

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

最新更新