2012-04-19 3 views
0

こんにちは私のデータベースに自分の人のテーブルの一意の姓と名が必要です。休暇中の人の姓とファーストネームクラスのユニークな値

<?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ファイル内の人物のマッピングでユニーク制約を追加することができますどのような方法があります: 人のための私のHibernate 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; 
} 

} 

人のための私の休止状態のhbm.xmlファイルがあります私の姓と名はデータベースで一意です/

ありがとうございます。

答えて

0

<natural-id>要素を使用して、last namefirst nameを含むナチュラルキーを作成できます。

<natural-id>は、テーブルスキーマがHibernate hbm2ddlによって生成されたときにナチュラルキー列にユニーク制約を作成するのに役立つことに注意してください。 Hibernateは実行時に<natural-id>列の一意性検証を行いません。

したがって、Hibernateを使用してテーブルスキーマを再作成する予定がない場合は、DDLを使用してこれらの列のユニーク制約を手動で追加し、データベースに一意性をチェックさせるだけです。

+0

姓と名をNaturalIdとしてマークすると、テーブル内で一意であることが要求されますが、Hibernateはそのエンティティに対してコミットされないようにします。いずれかのフィールドを更新するには、古いオブジェクトから新しいオブジェクトを作成し、最初または最後の名前を変更する必要があります。最後に、コレクション、オブジェクト、配列などの最初のオブジェクトのすべての出現箇所を新しいオブジェクトで置き換える必要があります。 –

+0

さらに、NaturalIds *は「変更可能」としてマークすることもできます。それをすることに不利な点があるかどうかはわかりません。 –

+0

多くの人に感謝して、今働いています。私はデータベースに複合キーを作り、それに従った。 – user1344735

関連する問題