2012-01-11 4 views
1

(java1.6、hibernate、mySql)(Hibernate)リストセマンティクスをリストに使用する方法<String>?

文字列のリストを含むJavaクラスを永続化しようとしています。問題は、私がそれをフェッチするとき、私はListまたはPersistentListの代わりにPersistentBagを取得することです。私は答えや例を探しましたが、私はもっと混乱しました。

私が使用小さなテストケースを有する:第一
(のassertEquals(実際、予想))中に問題が最初のassertEquals作品として見ることができる

@Test 
public void testFind() { 
    FooEntity expected = createFoo(); 
    FooEntity actual = dao.find(expected.getId()); 
    assertEquals(expected, actual); 
    assertEquals(actual, expected); 
} 

を、失敗しました。これはListがPersistentBagとして取得されるために発生します。

ここで何が間違っているのか分かりますか?あなたは私を助けてくれますか?ここ

が私のコードです:

import java.util.ArrayList; 
import java.util.List; 
import javax.persistence.Column; 
import javax.persistence.ElementCollection; 
import javax.persistence.Entity; 
import javax.persistence.FetchType; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name = "EXAMPLE4_FOO") 
public class FooEntity { 

    @Id 
    @GeneratedValue 
    @Column(name = "ID") 
    private int id; 

    @Column(name = "LIST") 
    @ElementCollection(fetch = FetchType.EAGER) 
    private List<String> strings = new ArrayList<String>(); 

    public FooEntity() { 
    } 

    public int getId() { 
    return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public List<String> getStrings() { 
    return strings; 
    } 

    public void setStrings(ArrayList<String> strings) { 
     this.strings = strings; 
    } 

/* 
    equals() and hashCode() .... 
*/ 
} 

答えて

5

リストを持っているために、Hibernateは、リストの要素を注文またはインデックスする方法を知っている必要があります。 @OrderColumnアノテーションまたは@OrderByアノテーションを使用します。これらの注釈の詳細と相違点については、を参照してください。

要素を注文または索引付けできない場合は、リストではなくバッグがあります。要素の順序を考慮しないように固定する必要があるのは、equalsメソッドです。

関連する問題