2016-11-23 15 views
-2

データベースにレコードを保存しようとしていますが、正常に保存されましたが、保存ボタンをクリックするたびにレコードがテーブルに保存されます。 1つのレコードが複数回保存されていることを意味します。レコードを複数回保存する

public void saveEmployeeDetails(Employee employeeDetails){ 

    try{ 
     System.out.println("----saveEmployeeDetails----");   

     getSession().saveOrUpdate(employeeDetails); 

     } 
     catch (Exception e) {    
      e.printStackTrace();   
    } 
} 

私は1回だけ保存します。私のコードで何が間違っていますか?

Javaクラス

public class Employee { 
private long id; 
private String empid; 
private String empname; 

public long getId() { 
    return id; 
} 
public void setId(long id) { 
    this.id = id; 
} 
public String getEmpid() { 
    return empid; 
} 
public void setEmpid(String empid) { 
    this.empid = empid; 
} 
public String getEmpname() { 
    return empname; 
} 
public void setEmpname(String empname) { 
    this.empname = empname; 
} 
} 

HBMファイルHibernateは、同じオブジェクトが保存されてきているあなたのケースequlaity.inオブジェクトのが、differend id.を持つエンティティのid使用

<hibernate-mapping> 
<class name="org.hibernatejavaapp.Employee" table="EMP_DETAILS"> 
    <id name="id" type="long"> 
     <generator class="native"></generator> 
    </id> 
    <property name="empid" column="EMPID" type="string" length="255" not-null="true" /> 
    <property name="empname" column="EMPNAME" type="string" length="255" not-null="true" />  
</class> 
</hibernate-mapping> 
+0

Employeeクラスを共有できますか?保存ごとに主キーが変更されたようです。 – Ouney

+0

あなたの質問は答えを提供する明確ではありません。 http://stackoverflow.com/help/how-to-ask – vels4j

+0

と同じIDをデータベース – Zia

答えて

0

は、あなたがしたい場合はあなたのエンティティクラスのequals()hashcode()メソッドをオーバーライドしてください。saveUpdate()を使用していますので、識別子に基づいてまたはupdate()が存在するかどうかを確認します。例えば、識別子が存在する場合、update()が呼び出され、そうでなければsave()が呼び出される。

あなたの質問に基づいた私の仮定は、これが問題ではない場合は、完全なコードを投稿してください。

0

質問から、あなたは主キーとしてempIdする必要があるようです。データ・モーダルにビジネス・キーがない場合は、サロゲート・キーを使用する必要があります。 これを行うと、特定の従業員に対して、特定の従業員に対して複数のレコードを挿入することはありません。

あなたのIDは、多くの挿入を引き起こしている特定の従業員のたびに変わります。

+0

を表示してください。私はIDを削除することはできますか? – Java

関連する問題