Hibernate неверный столбец таблицы

hibernate nhibernate-mapping hibernate-criteria

51 просмотра

2 ответа

Почему приведенный ниже код вызывает ошибку, но аналогичный код работает в моем проекте. Почему я получаю неверный столбец таблицы для полей.

Объекты: Адрес

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

}
Автор: Pani Источник Размещён: 08.11.2019 10:57

Ответы (2)


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>

Я надеюсь, что приведенный здесь столбец такой же, как в вашей БД.

Автор: amit Размещён: 20.08.2016 10:03

0 плюса

если вы используете базу данных mysql, используйте приведенную ниже конфигурацию аннотации, в противном случае измените стратегию = "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;
            }
        }   
Автор: Prakruthi HM Размещён: 20.08.2016 10:44
Вопросы из категории :
32x32