Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何映射类中没有属性id的hibernate映射文件?_Java_Hibernate - Fatal编程技术网

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

Java 如何映射类中没有属性id的hibernate映射文件?,java,hibernate,Java,Hibernate,我创建了一个简单的类和一个简单的数据库表来测试hibernate的概念。 该类名为“Employee”: 数据库名称为“EMPLOYEE”: 这是我的Employee.hbm.xml: ... ... 因此,您可以注意到,在我的类中,它没有“id”属性。但是,我在数据库中创建id列,让它成为自动生成的主键。在这种情况下,我不知道应该在中放置什么来将我的类映射到我的数据库。如果我忽略它,以后会不会出现一些问题?根据我的经验,您应该将该id作为POJO(Employee类)的一个属性。这是因为

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

数据库名称为“EMPLOYEE”:

这是我的Employee.hbm.xml:


...
...

因此,您可以注意到,在我的类中,它没有“id”属性。但是,我在数据库中创建id列,让它成为自动生成的主键。在这种情况下,我不知道应该在
中放置什么来将我的类映射到我的数据库。如果我忽略它,以后会不会出现一些问题?

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

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

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

所以在注释中你会说

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

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

如果不想使用@Id,您可以使用@EmbeddeDid annotation。

这是否取决于您的数据库如何处理“自动增量”以及您为什么不想在类中映射它?@domfarr:所以,我不必在Employee.hbm.xml中定义它,是吗?然而,我认为这会是一些问题。我同意你的看法,但也有一些情况下,一个类不属于我。所以,我不能修改它。我必须按照用户要求创建一个数据库。@Maverick然后您必须包装该类并提供您自己的id,或者使用translator对象在您不拥有的类和您的持久化表示之间进行转换
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)
);
<hibernate-mapping>
   <class name="Employee" table="EMPLOYEE">
      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      ...
      ...
   </class>
</hibernate-mapping>
@Id @GeneratedValue(strategy=GenerationType.NATIVE)
private Integer id;