【问题标题】:remove duplicate rows from database with hibernate使用休眠从数据库中删除重复的行
【发布时间】:2012-05-18 23:21:09
【问题描述】:

我有一个hbm文件,如下:

<?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 会给我这个选项吗?

【问题讨论】:

  • 您想查找所有信息是否相同或部分信息是否足够。我的意思是你有一个 id 列,它必须是唯一的。如果您尝试添加另一个具有相同 id 的人,休眠应该抛出异常。
  • 我知道我们有 id,但考虑到有一个人的名字是“alex”,家人是“peterson”。我想告诉我的系统阻止添加包含这些信息的另一个主体。

标签: java database hibernate hibernate-mapping


【解决方案1】:

我想我了解您想要实现的目标。但我不知道你是否先在stackoverflow中搜索你的问题。这可能是你的答案How to do multiple column UniqueConstraint in hbm?

【讨论】:

    【解决方案2】:

    您是否在数据库中的 ID 列上设置了自动增量?

    【讨论】:

      【解决方案3】:

      您已经有一个 id 值的生成器。这应该会生成一个唯一的 id,但只有当这两个条件为真时才会这样做:

      1. 列被定义为自动增量(例如 MySQL)或具有序列(例如 Oracle)
      2. 保存新行时,成员变量id设置为0。

      我可以想象,当你用以前的信息保存一个新值时,变量 id 仍然有一个值!= 0,在这种情况下,数据库使用给定的值而不是生成一个新的唯一值,这将失败到唯一约束。

      如果表上有第二个唯一索引,也会出现此错误。

      【讨论】:

        【解决方案4】:

        只需将其添加到您的映射中

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-12-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-01
          • 1970-01-01
          • 2017-04-05
          • 2023-03-04
          相关资源
          最近更新 更多