(Hibernate) Как использовать семантику списка для списка <String>? - PullRequest
1 голос
/ 11 января 2012

(java1.6, hibernate, mySql)

Я пытаюсь сохранить класс 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() ....
*/
}

1 Ответ

5 голосов
/ 11 января 2012

Чтобы иметь список, Hibernate должен знать, как упорядочивать или индексировать элементы списка. Используйте аннотацию @OrderColumn или аннотацию @OrderBy. См. http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#collections-indexed для деталей и различий между этими аннотациями.

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

...