【问题标题】:(Hibernate) How to use List Semantics for a List<String>?(Hibernate) 如何为 List<String> 使用 List Semantics?
【发布时间】:2012-02-08 01:11:53
【问题描述】:

(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(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() ....
*/
}

【问题讨论】:

    标签: hibernate list semantics persistent bag


    【解决方案1】:

    要拥有一个列表,Hibernate 需要知道如何对列表中的元素进行排序或索引。使用@OrderColumn 注释或@OrderBy 注释。有关这些注释之间的详细信息和差异,请参阅http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#collections-indexed

    如果您无法对元素进行排序或索引,那么您就有了一个袋子,而不是一个列表。并且应该修复您的 equals 方法以避免考虑元素的顺序。

    【讨论】:

      猜你喜欢
      • 2020-01-11
      • 2013-08-26
      • 2020-11-27
      • 2016-11-26
      • 2015-01-12
      • 2022-01-05
      • 2021-09-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多