当前位置: 首页 > 知识库问答 >
问题:

如何在类中映射没有属性id的hibernate映射文件?

芮星海
2023-03-14
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;
   }
   ...
}
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列,让它成为自动生成的主键。在这种情况下,我不知道应该在 将我的类映射到我的数据库。如果我忽略了它,会不会是后来的一些问题呢?

共有1个答案

章学义
2023-03-14

我可以理解您的来意,但Hibernate使用对象的ID标识对象(在第一级和第二级缓存中),因此没有ID的对象不能在Hibernate中表示。

我建议您将generator类创建为native字段,并让db处理该值。

所以在注释中你会说

@Id @GeneratedValue(strategy=GenerationType.NATIVE)
private Integer id;
 类似资料:
  • 是否可以使用Hiberanate映射数据库列,这样我就可以在HQL查询中使用它,但不能将它映射到映射类中的实际属性? 由于数据库强加给我们的表名和列名类似于hashcodes,我们希望使用HQL进行更新,它可以使用漂亮的映射名称。因此,我们需要在Hibernate中映射列。

  • 问题内容: 在我的applicationContext.xml中,这就是将xml映射到POJO的方式。如何将目录映射到类文件而无需创建xml? 问题答案: 您可以通过转换进一步简化操作 至 现在您的包中所有带有注释的类都将自动被拾取。

  • 我正在使用Hibernate和JPA注释来映射我的类。当hibernate尝试映射这个类时,我遇到了一个问题 我的Social alStat类是: 我得到了这个错误: 我猜发生这种情况是因为我试图映射到一个基本类,但@ElementCollection注释不应该解决这个问题吗? 我的item类如下所示:

  • 问题内容: 通用实体,超类: pojo: 我尝试使用那些注释:@ AttributeOverride,@ Id等,但是它不起作用。你能帮助我吗?我想覆盖属性“ id”以通过pojo / table指定另一个列名和一个序列。最好的方法是什么? 问题答案: 试试这个,代替

  • 在我的数据库表中,我有一个列,它的内容可以是Y或N(CHECK约束)。我在Java中定义了一个String属性,在我的类中定义了一个基于String的setter。此外,为了方便起见,我添加了一个带有布尔参数的setter/getter。 那么,Hibernate基于什么属性进行映射呢?方法名称?参数名称?参数类型?在setter中使用可以吗?如果我的属性的名称与表列的名称不同,这会有什么不同吗?

  • 问题内容: 有人可以解释在xml映射文件中使用逆函数的方法吗,我正在阅读本教程,但无法理解在映射文件中的逆用法? 谢谢 问题答案: 逆仅决定关系中的哪个实体负责更新数据库以反映关联。 假设一对多的双向关联。代码A和B中有两个类,A包含一组B,B维护对A的引用。在数据库级别,只有一个外键要更新,B的表包含一个到主键的列的A。 在这种情况下,假设我们将inverse = true放在集合侧。这意味着仅