0

我有一个关于如何休眠保存字符串(或对象)的数组列表的问题。我在这里读到,所以他们说 Hibernate 会尝试调用 arraylist 的 toString 方法来持久化它。

我写了一个小代码来测试它,但它不像他们说的那样工作。

class CustomizeArrayList extends ArrayList<String> 
    private static final long serialVersionUID = 1L;

    @Override
    public String toString() {
        // TODO Auto-generated method stub
        System.out.println("To String of customize arraylist");
        return super.toString();
    }
}

我正在使用这种类型:

@Column("array")
private CustomizrArrayList array

它不是调用 toString 方法,是使用反射来持久化或序列化还是其他什么?

提前致谢!

4

1 回答 1

0

Hibernate 知道许多内部 Java 类型以及如何转换它们。List类型就是其中之一。对于所有列表类型(链接的、基于数组的或您的自定义列表),Hibernate 将使用相同的基于列表的方法,该方法基本上尝试将列表的所有元素放入另一个表中。

你不想要那个。实现您想要的一种方法是使用String[](即基本数组类型而不是集合)而不是您的自定义类型,但这会在其他地方产生新问题。

正确的解决方案是告诉 Hibernate 您需要对这种类型进行特殊处理。实现接口UserType文档)。在方法nullSafeGet()andnullSafeSet()中,您可以在 DB 列(VARCHAR我猜)和您的CustomizeArrayList.

要注册类型,您可以使用“类型注册表”(见此处)或@Type注释(博客文章

于 2013-04-28T14:42:23.637 回答