2012-01-11 4 views
1

(java1.6, hibernate, mySql)(Hibernate) Как использовать семантику списка для списка <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. См. для подробностей и различий между этими аннотациями.

Если вы не можете заказать или проиндексировать свои элементы, у вас есть сумка, а не список. И это ваш метод равных, который должен быть исправлен, чтобы не учитывать порядок элементов.