Pani
Pani

Reputation: 186

Hibernate invalid table column

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

Answers (2)

Prakruthi HM
Prakruthi HM

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

Amit
Amit

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

Related Questions