我有一个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给我这个选项吗?
答案 0 :(得分:1)
好吧,只需将其添加到您的映射
即可<properties name="firstName_lastName_unique" unique="true">
<property name="firstName"/>
<property name="lastName"/>
</properties>
答案 1 :(得分:0)
我想我明白你想要达到的目标。但我不知道你是否先在stackoverflow中搜索你的问题。这可能是您的回答How to do multiple column UniqueConstraint in hbm?
答案 2 :(得分:0)
您是否在数据库的ID列上设置了自动增量?
答案 3 :(得分:0)
您已经拥有id值的生成器。这应该生成一个唯一的id,但只有在这两个条件成立时才会这样做:
我可以想象,当您使用以前的信息保存新值时,变量id仍然具有值!= 0,在这种情况下,数据库使用给定值而不是生成新的唯一值,这将失败到期独特的约束。
如果表上有第二个唯一索引,也会出现此错误。