在Hibernate中持久化LinkedList

我试图坚持使用LinkedList属性的类,但似乎无法正确。 这是我的代码和我的映射:

import java.util.LinkedList; public class Stuff implements java.io.Serializable { private long id; private LinkedList images; public Stuff() { } public Stuff(long Id) { id = Id; } public long getId() { return id; } public void setId(long mealId) { id = mealId; } public LinkedList getNumberImages(int number) { assert (number >= 0); return (LinkedList) images.subList(0, number) ; } public LinkedList getImages() { return images; } public LinkedList setImages(LinkedList images) { this.images = images; } public void addImage(Image image) { if (!images.contains(image)) { images.add(image); } } 

Hibernate映射:

                

似乎我可以像这样坚持Class Stuff的对象但是当我尝试恢复它们时会发生以下错误:

 Hibernate: select stuff0_.ID as ID0_, stuff0_.NAME as NAME0_, meal0_.GROUPING as GROUPING0_ from MEAL meal0_ org.hibernate.PropertyAccessException: could not set a field value by reflection setter of data.Meal.images 

通常,Hibernate将为集合提供自己的实现,因此您应该更喜欢特定实现的接口。 它可能试图为图像分配不同类型的列表并失败。 您必须将字段更改为List

Hibernate(以及一般的JPA)使用其接口来持久化集合。 该列表必须声明为List ,而不是LinkedList 。 并且它不会加载LinkedList实例,因为Hibernate使用自己的List实现来实现脏检查,延迟加载等。

在接口上编程是一种很好的做法,而不是通常对具体实现进行编程。 在JPA实体中,它是强制性的。