2012-01-11 12 views
1

(java1.6,hibernate,mySql)(Hibernate)如何使用List語義列表<String>?

我試圖堅持一個包含字符串列表的java類。問題是,當我獲取它時,我得到一個PersistentBag而不是List或PersistentList。我尋找答案或例子,但我只是更困惑。

我有使用一個小的測試用例:

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

問題可以看作是第一的assertEquals工作,而第二個,
(的assertEquals(實際,預期);),失敗。它發生自列表檢索爲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註釋。有關這些註釋的詳細信息和差異,請參閱。

如果你不能訂購或索引你的元素,那麼你有一個包,而不是一個列表。這是你應該修正的平等方法,以避免考慮元素的順序。

相關問題