如何存储与hibernate一起订购的ArrayList?

时间:2015-08-10 07:18:17

标签: java hibernate

列表中的元素按插入顺序排列:

List<Object> list = new ArrayList<>();
list.add(obj);

现在我想将列表存储在带有hibernate的postgres表中,并希望保留插入顺序。是否可能hibernate获取集合并且它具有与插入前相同的顺序?

3 个答案:

答案 0 :(得分:4)

您必须在数据库中保留订单 - 例如,添加映射到order列的ORDER属性

从JPA获取实体时,您可以使用@OrderBy注释进行排序

@Entity
@Table(name = "VEHICLE")
public class Vehicle {

    // other fields here

    @OneToMany(mappedBy = "vehicle")
    @OrderBy("vehicle.order ASC")
    Set<VehicleImage> vehicleImages;

    public void addImage(VehicleImage image) {
        if (null == vehicleImages) vehicleImages = new HashSet<>();
        image.setSize(vehicleImages.size() + 1);
        image.setVehicle(this);
        vehicleImages.add(this);
    }

}

@Entity
@Table(name = "VEHICLE_IMAGE")
public class VehicleImage{

    // other fields here
    @Column(name = "ORDER")
    private int order;

    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.PERSIST)
    @JoinColumn(name="VEHICLE_ID", referencedColumnName = "ID")
    Vehicle vehicle;

}

答案 1 :(得分:1)

最后我得到了以下解决方案:

@OneToMany(mappedBy...)
@OrderBy("id")
private Set<MyEntity>list = new  LinkedHashSet<>();

@Entity
class MyEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
}

我的要求是保留插入顺序,这是使用LinkedHashSet给出的。由于数据库id是自动生成的并且总是递增的,我可以按生成的ID对该集合进行排序,并在select上获得按原始插入顺序排序的列表。

答案 2 :(得分:0)

看看@OrderColumnthis great article。这样就可以了-在给定的父级(列表集合)的上下文中保持顺序。