2016-08-20 11 views
2

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

Сущности: Адрес

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> 

класс Test:

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

Какие ошибки вы получили? – Khodabakhsh

ответ

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> 

Я надеюсь, что указанная здесь колонка такая же, как в вашей БД.

+0

HIbernate рассмотрит значение атрибута имени для вызова метода setter. Нет необходимости, чтобы имя переменной класса и значение атрибута имени совпадали. – Pani

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

Привет, Вышеупомянутая программа работает нормально. После перезапуска моего затмения – Pani