3

休止状態の概念をテストするために、データベースの単純なクラスと単純なテーブルを作成しました。クラスの名前は「従業員」です。

public class Employee {
   private String firstName; 
   private String lastName;   
   private int salary;  
   public Employee(String fname, String lname, int salary) {
      this.firstName = fname;
      this.lastName = lname;
      this.salary = salary;
   }
   ...
}

データベース名「EMPLOYEE」:

create table EMPLOYEE (
   id INT NOT NULL auto_increment,
   first_name VARCHAR(20) default NULL,
   last_name  VARCHAR(20) default NULL,
   salary     INT  default NULL,
   PRIMARY KEY (id)
);

これは私の Employee.hbm.xml です:

<hibernate-mapping>
   <class name="Employee" table="EMPLOYEE">
      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      ...
      ...
   </class>
</hibernate-mapping>

したがって、私のクラスには「id」属性がないことに気付くでしょう。ただし、データベースに id 列を作成して、自動的に生成される主キーにします。<id name="?" type="int" column="id"> この場合、クラスをデータベースにマップするために に何を入れればよいかわかりません。無視すると後々問題になるのでしょうか?

4

3 に答える 3

3

どこから来たのかは理解できますが、Hibernate はオブジェクトの ID を使用してオブジェクトを (第 1 および第 2 レベルのキャッシュで) 識別するため、ID のないオブジェクトは休止状態で表現できません。

ジェネレータークラスを使用してフィールドを作成しnative、データベースに値を処理させることをお勧めします。

だから注釈であなたは言うだろう

@Id @GeneratedValue(strategy=GenerationType.NATIVE)
private Integer id;

このエントリを複数回繰り返したくない場合は、これを持つ基本クラス (base pojo) を作成し、すべてのモデルでクラスを拡張できます。

于 2013-06-14T13:07:55.573 に答える