3

我创建了一个简单的类和一个简单的数据库表来测试休眠概念。该类名为“Employee”:

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 识别对象(在一级和二级缓存中),因此没有 ID 的对象不能在休眠中表示。

我建议您使用生成器类创建字段,native并让数据库处理该值。

所以在注释中你会说

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

如果您不想多次重复此条目,则可以创建一个具有此条目的基类(base pojo)并在所有模型中扩展该类。

于 2013-06-14T13:07:55.573 回答
2

您可以使用 Composite Key Concept ,如果您不想使用@Id,您可以使用@EmbededId 注解。

于 2014-05-05T10:58:53.007 回答
1

根据我的经验,您应该将 id 作为 POJO(员工类)的属性。这样做的原因是当您想在数据库中搜索特定的 Employee 对象时可能需要 id(Hibernate Sessionget()load()方法需要 id)。此外,由于您已将 id 映射为 Hibernate 映射文件中的属性,因此它应该与属性/属性的 POJO(员工类)定义相对应。

于 2013-06-14T10:21:26.970 回答