2013-06-22 3 views
0

Как я бег моего главного класс(Runner) программы я получаю следующее исключение:Почему я получаю org.hibernate.id.IdentifierGenerationException?

org.hibernate.id.IdentifierGenerationException: attempted to assign id 
from null one-to-one property: country 

Я не знаю причины, почему я получаю это исключение.

Отображение XML:

<hibernate-mapping> 
    <class name="pojo.Country" table="country"> 
     <id name="countryID" column="c_id"> 
      <generator class="increment" /> 
     </id> 
     <property name="countryName" column="c_name" /> 
     <one-to-one class="pojo.PM" name="pm" cascade="all" /> 
    </class> 

    <class name="pojo.PM" table="pm"> 
     <id name="countryID" column="c_id"> 
      <generator class="foreign"> 
       <param name="property">country</param> 
      </generator> 
     </id> 
     <property name="pmName" column="pm_name" /> 
     <one-to-one class="pojo.Country" name="country" constrained="true" /> 
    </class> 
</hibernate-mapping> 

POJO Классы:

Страна

public class Country { 
    private int countryID; 
    private String countryName; 
    private PM pm; 

    public PM getPm() { 
     return pm; 
    } 

    public void setPm(PM pm) { 
     this.pm = pm; 
    } 

    public int getCountryID() { 
     return countryID; 
    } 

    public void setCountryID(int countryID) { 
     this.countryID = countryID; 
    } 

    public String getCountryName() { 
     return countryName; 
    } 

    public void setCountryName(String countryName) { 
     this.countryName = countryName; 
    } 
} 

PM

public class PM { 
    private int countryID; 
    private String pmName; 
    private Country country; 

    public int getCountryID() { 
     return countryID; 
    } 

    public void setCountryID(int countryID) { 
     this.countryID = countryID; 
    } 

    public String getPmName() { 
     return pmName; 
    } 

    public void setPmName(String pmName) { 
     this.pmName = pmName; 
    } 

    public Country getCountry() { 
     return country; 
    } 

    public void setCountry(Country country) { 
     this.country = country; 
    } 

} 

и это класс, который пытается совершить сделку:

SQL, который создал таблицу:

CREATE TABLE country(c_id INTEGER,c_name TEXT,PRIMARY KEY(c_id)); 
CREATE TABLE pm(c_id INTEGER,pm_name TEXT); 

ответ

2

Проблема заключается в country переменной. Вы должны инициализировать все attirbutes перед попыткой сделать некоторые транзакции.

EDIT: В файле Hibernate вы хотите сгенерировать идентификатор PM из идентификатора объекта country. Однако это свойство никогда не было инициализировано.

<class name="pojo.PM" table="pm"> 
     <id name="countryID" column="c_id"> 
      <generator class="foreign"> 
       <param name="property">country</param> 
      </generator> 
     </id> 
     <property name="pmName" column="pm_name" /> 
     <one-to-one class="pojo.Country" name="country" constrained="true" /> 
    </class> 

Итак, добавьте pm.setCountry(c); в свой код.

+1

Я не могу удалить исключение. Пожалуйста, помогите –

+0

хорошо ... Спасибо! –