Hibernate-列表序列号自动生成,无间隔,从零开始

Hibernate-列表序列号自动生成,无间隔,从零开始,hibernate,Hibernate,我有一个UserObject,它包含一个SearchLog对象列表。此搜索日志列表大小定义为最大5。 现在,每当我向SearchLog列表中的UserObject添加搜索日志时,我都希望将其添加到第一个位置。SearchLog对象有一个序列号,我想由hibernate自动生成。因此,如果searchLog列表在第一个位置添加第四个searchLog时包含3个元素,那么先前持久对象的序列号应该会自动更改 <hibernate-mapping package="com.xxx.admin.bo

我有一个UserObject,它包含一个SearchLog对象列表。此搜索日志列表大小定义为最大5。
现在,每当我向SearchLog列表中的UserObject添加搜索日志时,我都希望将其添加到第一个位置。SearchLog对象有一个序列号,我想由hibernate自动生成。因此,如果searchLog列表在第一个位置添加第四个searchLog时包含3个元素,那么先前持久对象的序列号应该会自动更改

<hibernate-mapping package="com.xxx.admin.bo">
  <class name="UserObject " table="USER" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID" >
      <generator class="identity"/>
    </id>
    <property name="firstName" type="java.lang.String" column="FIRST_NAME" length="30"/>
    <list name="searchLogs" table="SEARCH_LOG" cascade="all-delete-orphan" lazy="true" inverse="true" >
      <key column="USER_OBJECT_ID" />
      <index column="SEQUENCE_NUMBER" />
      <one-to-many class="SearchLog" />    
    </list>
  </class>
</hibernate-mapping>
<hibernate-mapping package="com.xxx.admin.bo">
  <class name="SearchLog" table="SEARCH_LOG" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID">
      <generator class="identity"/>
    </id>
    <property name="searchQuery" type="java.lang.String" column="SEARCH_QUERY" length="250"/>
    <property name="sequenceNumber" type="java.lang.Integer" column="SEQUENCE_NUMBER" not-null="true" />
    <property name="userObjectId" type="java.lang.Integer" column="USER_OBJECT_ID"/>
  </class>
</hibernate-mapping>
当尝试在SearchLog列表中用一个新的SearchLog对象保存UserObject时,我得到一个例外,即应该指定搜索日志的序列号(DB中的NOTNULL字段)。如果我显式地设置序列号,它可以正常工作,但我希望hibernate能够自动处理这个问题。可以这样做吗?或者手动设置序列号是唯一的方法

<hibernate-mapping package="com.xxx.admin.bo">
  <class name="UserObject " table="USER" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID" >
      <generator class="identity"/>
    </id>
    <property name="firstName" type="java.lang.String" column="FIRST_NAME" length="30"/>
    <list name="searchLogs" table="SEARCH_LOG" cascade="all-delete-orphan" lazy="true" inverse="true" >
      <key column="USER_OBJECT_ID" />
      <index column="SEQUENCE_NUMBER" />
      <one-to-many class="SearchLog" />    
    </list>
  </class>
</hibernate-mapping>
<hibernate-mapping package="com.xxx.admin.bo">
  <class name="SearchLog" table="SEARCH_LOG" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID">
      <generator class="identity"/>
    </id>
    <property name="searchQuery" type="java.lang.String" column="SEARCH_QUERY" length="250"/>
    <property name="sequenceNumber" type="java.lang.Integer" column="SEQUENCE_NUMBER" not-null="true" />
    <property name="userObjectId" type="java.lang.Integer" column="USER_OBJECT_ID"/>
  </class>
</hibernate-mapping>
这就是我一直在尝试的-

public class UserObject {
  private Integer id;
  private String firstName;
  private List<SearchLog> searchLogs = new ArrayList<SearchLog>();
}

public class SearchLog {
    private Integer id;
    private String searchQuery;
    private Integer sequenceNumber;
private Integer userObjectId;
}  
<hibernate-mapping package="com.xxx.admin.bo">
  <class name="UserObject " table="USER" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID" >
      <generator class="identity"/>
    </id>
    <property name="firstName" type="java.lang.String" column="FIRST_NAME" length="30"/>
    <list name="searchLogs" table="SEARCH_LOG" cascade="all-delete-orphan" lazy="true" inverse="true" >
      <key column="USER_OBJECT_ID" />
      <index column="SEQUENCE_NUMBER" />
      <one-to-many class="SearchLog" />    
    </list>
  </class>
</hibernate-mapping>
<hibernate-mapping package="com.xxx.admin.bo">
  <class name="SearchLog" table="SEARCH_LOG" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID">
      <generator class="identity"/>
    </id>
    <property name="searchQuery" type="java.lang.String" column="SEARCH_QUERY" length="250"/>
    <property name="sequenceNumber" type="java.lang.Integer" column="SEQUENCE_NUMBER" not-null="true" />
    <property name="userObjectId" type="java.lang.Integer" column="USER_OBJECT_ID"/>
  </class>
</hibernate-mapping>

在SearchLog.hbm.xml中,请改为使用此Notice insert=“false”update=“false”并删除NOTNULL属性

<hibernate-mapping package="com.xxx.admin.bo">
  <class name="UserObject " table="USER" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID" >
      <generator class="identity"/>
    </id>
    <property name="firstName" type="java.lang.String" column="FIRST_NAME" length="30"/>
    <list name="searchLogs" table="SEARCH_LOG" cascade="all-delete-orphan" lazy="true" inverse="true" >
      <key column="USER_OBJECT_ID" />
      <index column="SEQUENCE_NUMBER" />
      <one-to-many class="SearchLog" />    
    </list>
  </class>
</hibernate-mapping>
<hibernate-mapping package="com.xxx.admin.bo">
  <class name="SearchLog" table="SEARCH_LOG" dynamic-update="true" dynamic-insert="true" discriminator-value="AT">
    <id name="id" type="java.lang.Integer" column="ID">
      <generator class="identity"/>
    </id>
    <property name="searchQuery" type="java.lang.String" column="SEARCH_QUERY" length="250"/>
    <property name="sequenceNumber" type="java.lang.Integer" column="SEQUENCE_NUMBER" not-null="true" />
    <property name="userObjectId" type="java.lang.Integer" column="USER_OBJECT_ID"/>
  </class>
</hibernate-mapping>
<property name="sequenceNumber" type="java.lang.Integer" column="SEQUENCE_NUMBER" insert="false" update="false"/>


谢谢,它能工作……但我不得不添加一些更改,而不是以前的更改。我还必须更改为@Raks You's You's right。之所以发生这种情况,是因为USER\u OBJECT\u ID是指向UserObject实体的外键列。所以,当您保存UserObject及其相关的搜索日志时,Hibernate会设置外键USER\u OBJECT\u ID列