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