2012-04-19 84 views
0

嗨我想爲我的數據庫中的人員表具有唯一的姓氏和名字。 我休眠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文件中添加唯一約束等等我的名字和姓氏在數據庫中是唯一的/

非常感謝。

回答

0

您可以使用<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

相關問題