休息时人姓氏和名字类的独特价值

问题描述:

嗨我想为我的数据库中的人员表具有唯一的姓氏和名字。 我休眠XML映射的人休息时人姓氏和名字类的独特价值

package com.me.POJO; 

public class Person { 

private int personId; 
private String firstName; 
private String lastName; 
private String streetAddress; 
private String aptNo; 
private String city; 
private int zipCode; 

public Person(){} 
public Person(String firstName, String lastName, String streetAddress, 
String aptNo, String city, int zipCode) { 
this.firstName = firstName; 
this.lastName = lastName; 
this.streetAddress = streetAddress; 
this.aptNo = aptNo; 
this.city = city; 
this.zipCode = zipCode; 
} 

public int getPersonId() { 
return personId; 
} 

public void setPersonId(int personId) { 
this.personId = personId; 
} 

public String getFirstName() { 
return firstName; 
} 

public void setFirstName(String firstName) { 
this.firstName = firstName; 
} 

public String getLastName() { 
return lastName; 
} 

public void setLastName(String lastName) { 
this.lastName = lastName; 
} 

public String getStreetAddress() { 
return streetAddress; 
} 

public void setStreetAddress(String streetAddress) { 
this.streetAddress = streetAddress; 
} 

public String getAptNo() { 
return aptNo; 
} 

public void setAptNo(String aptNo) { 
this.aptNo = aptNo; 
} 

public String getCity() { 
return city; 
} 

public void setCity(String city) { 
this.city = city; 
} 

public int getZipCode() { 
return zipCode; 
} 

public void setZipCode(int zipCode) { 
this.zipCode = zipCode; 
} 

} 

的人我的Hibernate的hbm.xml文件是:

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated Apr 9, 2012 2:49:54 PM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
<class name="com.me.POJO.Person" table="Person"> 
<id name="personId" type="int"> 
<column name="personId_PK" /> 
<generator class="native"></generator> 
</id> 
<property name="aptNo" type="java.lang.String"> 
<column name="aptNo" /> 
</property> 
<property name="city" type="java.lang.String"> 
<column name="city" /> 
</property> 
<property name="firstName" type="java.lang.String"> 
<column name="firstName" /> 
</property> 
<property name="lastName" type="java.lang.String"> 
<column name="lastName" /> 
</property> 
<property name="streetAddress" type="java.lang.String"> 
<column name="streetAddress" /> 
</property> 
<property name="zipCode" type="int"> 
<column name="zipCode" not-null="true" /> 
</property> 
</class> 
</hibernate-mapping> 

有没有什么办法可以在个人映射在HBM文件中添加唯一约束等等我的名字和姓氏在数据库中是唯一的/

非常感谢。

您可以使用<natural-id>元素制作一个包含last namefirst name的自然键。

请注意<natural-id>只有在表格架构由休眠hbm2ddl生成时,才有助于在自然键列上创建唯一约束。 Hibernate在运行时不会对<natural-id>列进行任何唯一性验证。因此,如果您不打算使用Hibernate重新创建表模式,则可以使用DDL手动添加这些列的唯一约束,并让数据库检查唯一性。

+0

将首字母和姓氏标记为NaturalId将要求它们在表中是唯一的,但是Hibernate将阻止*它们被永久承诺实体。要更新任一字段,您必须从旧对象创建一个新对象,修改第一个或最后一个名称。最后,你将不得不用集合,对象,数组等第一个对象的所有发生与新对象。 – 2012-04-21 01:06:17

+0

此外,NaturalIds *可以*也被标记为“可变”。我不知道这样做是否有什么不利之处。 – 2012-04-21 01:16:17

+0

感谢很多人,现在它的工作。我在数据库中创建了一个复合键,然后执行。 – user1344735 2012-04-22 07:05:32