当持久化ArrayList时调用toString方法?

时间:2013-04-26 07:56:12

标签: java hibernate

我有一个关于如何Hibernate保存字符串(或对象)的arraylist的问题。 I read here,所以他们说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方法,是使用反射来持久化还是序列化而不是其他什么?

提前致谢!

1 个答案:

答案 0 :(得分:0)

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

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

正确的解决方案是告诉Hibernate您需要对此类型进行特殊处理。实现接口UserTypedocs)。在方法nullSafeGet()nullSafeSet()中,您可以在数据库列(VARCHAR,我猜)和您的CustomizeArrayList之间进行转换。

要注册类型,您可以使用“类型注册表”(see here)或@Type注释(blog post