1

(java1.6、休止状態、mySql)

文字列のリストを含む Java クラスを永続化しようとしています。問題は、それを取得すると、List または PersistentList ではなく PersistentBag が取得されることです。答えや例を探しましたが、混乱するだけでした。

私が使用する小さなテストケースがあります:

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

問題は、最初の assertEquals が機能する一方で、2 番目の
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() ....
*/
}
4

1 に答える 1

5

リストを作成するには、Hibernate がリストの要素を順序付けまたはインデックス付けする方法を知っている必要があります。@OrderColumn アノテーションまたは @OrderBy アノテーションを使用します。これらのアノテーションの詳細と相違点については、http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#collections-indexedを参照してください。

要素を順序付けまたはインデックス付けできない場合は、リストではなくバッグを持っています。そして、要素の順序を考慮しないように修正する必要があるのは equals メソッドです。

于 2012-01-11T18:09:35.803 に答える