簡體   English   中英

為什么我得到org.hibernate.id.IdentifierGenerationException?

[英]Why am I getting org.hibernate.id.IdentifierGenerationException?

當我運行我的主類 (Runner)程序時,我得到以下異常:

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

下午

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

}

這是嘗試提交事務的類:

public class Runner {
    public static void main(String args[]) {System.out.println("dfdf");
        Configuration config = new Configuration().configure();
        SessionFactory sessFact = config.buildSessionFactory();
        Session session = sessFact.openSession();
        Transaction trans = session.beginTransaction();
        Country c = new Country();
        PM pm = new PM();
        pm.setPmName("Manmohan Singh");
        c.setCountryName("India");
        c.setPm(pm);

        session.save(c);
        trans.commit();

    }
}

創建表的SQL:

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

問題是country變量。 在嘗試執行某些事務之前,您應該初始化所有的attirbutes。

編輯:在您的Hibernate文件中,您希望從country屬性的ID生成PM ID。 但是,此屬性從未初始化。

 <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); 你的代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM