有没有办法我可以自己插入主键而不是在休眠中自动生成

时间:2013-11-15 07:29:02

标签: hibernate hibernate-mapping

<hibernate-mapping>
   <class name="Employee" table="EMPLOYEE">
      <meta attribute="class-description">
         This class contains the employee detail. 
      </meta>
      <id name="id" type="int" column="id">
         <generator class="native"/>
      </id>
      <property name="firstName" column="first_name" type="string"/>
      <property name="lastName" column="last_name" type="string"/>
      <property name="salary" column="salary" type="int"/>
   </class>
</hibernate-mapping>

正如您在上面的映射文件中所看到的,ID是使用generator class =“native”

自动生成的

有没有一种方法可以根据我的java逻辑来设置这个ID。 我不希望它为我自动生成,我想使用我自己的逻辑生成它然后插入表中,也有可能当我运行代码在表中插入一个值然后表得到如果数据库中已经存在,则自动在数据库中创建,我听说有一种方法可以做到这一点。

2 个答案:

答案 0 :(得分:1)

查看来自this point的官方文档:所有id生成器都得到了很好的解释 您也可以查看How to choose the id generation strategy when using JPA and Hibernate

答案 1 :(得分:1)

如果您没有为主键属性指定任何生成器,则hibernate将假定您使用assign策略。 assign策略告诉你要自己设置id,所以hibernate不会帮你定义id值。 (如果你试图保持一个具有null /已存在id的实体,那么hibernate将抛出一个异常)

所以定义你的映射如下:

<hibernate-mapping>
 <class name="Employee" table="EMPLOYEE">
  <meta attribute="class-description">
     This class contains the employee detail. 
  </meta>
  <id name="id" type="int" column="id"/>
  <property name="firstName" column="first_name" type="string"/>
  <property name="lastName" column="last_name" type="string"/>
  <property name="salary" column="salary" type="int"/>
 </class>
</hibernate-mapping>