2012-05-10 75 views
0

我有一個HBM文件,該文件是如下:從數據庫中刪除重複的行與Hibernate

<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 

<hibernate-mapping auto-import="true" default-lazy="false"> 
    <class name="com.saman.entity.hibernate.EmployeeEntity" 
      table="Employee" optimistic-lock="version"> 
     <id name="id"> 
      <column name="Id" sql-type="bigint"/> 
      <generator class="native"/> 
     </id> 
     <timestamp name="version" source="db"/> 
     <property name="firstName"> 
      <column name="FirstName" sql-type="nvarchar(300)"/> 
     </property> 
     <property name="lastName"> 
      <column name="LastName" sql-type="nvarchar(300)"/> 
     </property> 
     <property name="employeeType"> 
      <column name="EmployeeType" sql-type="nvarchar(300)"/> 
     </property> 
     <set name="shifts" table="Shifts" inverse="true" lazy="true" fetch="select"> 
      <key> 
       <column name="Id" not-null="true"/> 
      </key> 
      <one-to-many class="com.saman.entity.hibernate.ShiftEntity"/> 
     </set> 
    </class> 
</hibernate-mapping> 

現在我想,如果我增加一個員工,堅持它,如果再添​​加其他員工與以前的信息,我的系統引發了一個異常,並告訴我在數據庫中有另一名員工擁有這些信息。

冬眠給我這個選項嗎?

+1

你想找到,如果所有信息都是相同或部分就夠了。我的意思是你有一個ID列,它必須是唯一的。如果你嘗試添加另一個具有相同ID的人,hibernate應該拋出異常。 – mbaydar

+0

我知道我們有身份證,但考慮有一個名字叫「亞歷克斯」和家庭「彼得森」的人。我想告訴我的系統,防止添加這些信息的另一個機構。 – saman

回答

1

也只是添加到您的映射

<properties name="firstName_lastName_unique" unique="true"> 
     <property name="firstName"/> 
     <property name="lastName"/> 
</properties> 
0

您是否在數據庫的ID列上設置了自動增量?

0

您已經有了一個id值的生成器。這應該會生成一個唯一的ID,但它只能這樣做,如果這兩個條件都爲真:

  1. 要麼被定義爲自動增量(... P前MySQL的)或具有序列列(... P前甲骨文)
  2. 當保存一個新行,成員變量ID設置爲0。

我可以想像,當你保存與以前的信息的新值,變量ID仍然具有價值!= 0,在這種情況下,數據庫使用給定的值而不是生成一個新的唯一的唯一約束。

如果表中存在第二個唯一索引,則也會出現此錯誤。

相關問題