2012-05-10 3 views
0

У меня есть файл НВМ, который, как показано ниже:удалить повторяющиеся строки из базы данных с 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> 

теперь я хотел, если добавить работник и сохраняется его, если я добавить еще один сотрудник с предыдущей информацией, моя система вызывает исключение и говорит мне, что у меня есть другой сотрудник в базе данных с этой информацией.

hibernate дать мне эту опцию?

+1

Вы хотите найти, если все сведения являются одинаковыми или часть этого достаточно. Я имею в виду, что у вас есть столбец идентификаторов, и он должен быть уникальным. Если вы попытаетесь добавить другого человека с одним и тем же спящим ID, следует бросить и исключить. – mbaydar

+0

Я знаю, что у нас есть id, но подумайте, что есть человек с именем «alex» и семьей «peterson». я хотел сказать, что моя система не позволяет добавить другое тело с этой информацией. – saman

ответ

1

Ну просто добавить к вашему картографированию

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

Установили ли вы автоматический прирост в столбце ID в своей базе данных?

0

У вас уже есть генератор для значения id. Это должно генерировать уникальный идентификатор, но это только делает так, если эти два условия:

  1. В столбце либо определяется как автоинкремент (. Стр. Экс MySQL) или имеет последовательность (.. Р ех Oracle)
  2. при сохранении новой строки, переменная идентификатор члена устанавливается в 0.

Я могу себе представить, когда вы сохраняете новое значение с предыдущей информацией, переменная идентификатор еще имеет значение! = 0, и в этом случае база данных использует заданное значение вместо генерации новой уникальной, которая будет сбой из-за уникального ограничения.

Эта ошибка также может появиться, если в таблице есть второй уникальный индекс.

Смежные вопросы