2009-08-07 11 views
0

ここで私は自分の自己学習冬眠と個人実験プロジェクトで、より理解を深めています。 ここに私の環境の記述があります: 私は全てのモデルがfrom.itを継承するスーパーモデルエンティティを持っています。idプロパティは です。私はhibernate WebサイトにあるgenericDAOパターンを使用します。 私の問題は、私は1対多マッピング(ここでは重複を避ける必要はありません)とリストインデックスまたはリストインデックスプロパティのスーパーエンティティIDを参照するときに、このエラーが発生しました: org.hibernate.NonUniqueObjectException:同じ識別子の値を持つ異なるオブジェクトがすでにここでセッション と関連していたが、スーパーエンティティインタフェースリストとスーパーエンティティクラスを使ったhibernateコレクションマッピング

public interface Model extends Serializable { 
public Long getId(); 
public void setId(Long id); 
} 

//here is its implementation.they are not in the same physical file 
public abstract class ModelImpl implements Model { 
private Long id; 
public Long getId() { 
    return id; 
} 
public void setId(Long id) { 
    this.id = id; 
} 

}ここ

であることは、マッピングファイルです

<class abstract="true" name="ModelImpl"> 
<!--i removed doctype and stuffs--> 
<id name="id"> 
    <generator class="assigned"/> 
</id> 
</class> 

ここでは、これが私の親

public interface Message extends Model { 
Date getDateSent(); 
String getGlobalStatus(); 

} //その実装はここにあるが、異なる物理ファイルに パブリッククラスMessageImplがModelImplがMessage { プライベート文字列globalStatusを実装して拡張されPOJOインターフェイス上にあります。 プライベートリストレスポンス= new ArrayList(); プライベートDate dateSent; //セッターとゲッター....}

そのマッピングファイルそうのようである:

<union-subclass extends="ModelImpl" name="MessageImpl"> 
<property name="globalStatus"/> 
<property name="dateSent" type="timestamp"/> 

<設定/> - >

私はセットをコメントしました。なぜなら、そのキャストエラーは私に自分のeを認識させるものでしたrror はとても親であるレスポンスクラスはここにある:

public interface Response extends Model { 
String getGatewayMessageId(); 
Message getMessageId(); 
} 
//its implementation but in different physical file 
public class ResponseImpl extends ModelImpl implements Response{ 

private static final long serialVersionUID = 1L; 

private Message messageId; 
private String gatewayMessageId; 
//setters and getters.. 
} 

私はそれがこのスローその子とのメッセージを保存しようとするので、それは私のテスト中にthat.now基本的には次のとおりです。

組織.hibernate.NonUniqueObjectException:同じ識別子の値を持つ異なるオブジェクトがすでにセッション

と関連していた私は、すべてのpersitentメソッド例外私はただの話いずれかを行うことができます。 私はここで少し失われているそれらのすべてがモデルIDを継承しているので、何が間違っているのですか?読んでいただきありがとうございます。私は本当にここの問題を理解していません。

+0

のid manually.thanksを追加it.iを解決すでに別のエンティティによって使用されているIDを持つエンティティ –

答えて

0

ごとに新しいIDを注入(POJOとDAOSを作成します)管理者は、新たにテスト中POJO.andを作成しているあなたが保存しようとしている私はあなたの助け

0

既に存在するIDを持つエンティティを保存しようとしているようです。あなたは、ユニオンサブクラスのアプローチを使用しているときに、同じID空間を共有している可能性のあるすべてのサブクラスを認識していますか?

購入方法は、手動でIDを割り当てる理由があるのか​​、生成されたIDが役立つのでしょうか?

+0

はい、実際には何をしようとしているのかという要件を満たしています。同じidを別のpojoオブジェクトに与えることが重要であることを発見しました。今はテストを個別に実行します。しかし、findbyexample ResponseDAOImplのメソッド(ResponseDAOImplTestクラスを単独で実行するとうまくいきます)。理由は:org.hibernate.PropertyAccessException:model.ResponseImpl.messageIdのsetterを呼び出す際にIllegalArgumentExceptionが発生しました。私はちょうど私が少し失われたことを認めなければならない –

+0

それはちょうど文字通りあなたのセッターメソッドがIllegalArgumentExceptionを投げたことを意味します。なぜ自分のコードにそこにあるのかを知ることができるはずです。 – Henning

関連する問題