java - JPA : How to save list with order in a many-to-many relationship

标签 java jpa many-to-many eclipselink

当我坚持一个有顺序的列表时,数据库中的结果有不同的顺序。如何在 JPA 中保持与列表顺序的多对多关系?

@Entity
@Table(name = "house")
public final class House {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Basic(optional = false)
    @Column(name = "name")
    private String name

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "house_room",
            joinColumns =
            @JoinColumn(name = "id_house", referencedColumnName = "id"),
            inverseJoinColumns =
            @JoinColumn(name = "id_room", referencedColumnName = "id"))
    private List<Room> rooms;
}

房屋对象:

Room room1 = new Room();
room1.setName("Kitchen");

Room room2 = new Room();
room2.setName("Bathroom");

Room room3 = new Room();
room3.setName("Bedroom");

List<Run> runs = new ArrayList<Run>();
rooms.add(0,room2);
rooms.add(1,room1);
rooms.add(2,room3);

House cottage = new House();
cottage.setRooms(rooms);

persist(cottage); // order in database should be "room2", "room1" then "room3" but it is saved as "room1", "room2" then "room3"

最佳答案

使用@OrderBy 和@OrderColumn 注解在JPA 中有两种排序列表的方法。 @OrderColumn 也许就是您要找的东西。

@OrderBy

根据实体或元素的特定属性的比较指定排序规则

例子:

@OrderBy("name ASC")
private List<Room> rooms;

通过在映射上添加@OrderBy 注释,我们可以表明我们希望房间按名称属性按字母升序排序。 注意:我们不需要在 @OrderBy 注释中包含 ASC,因为默认情况下它是升序的。

简单地更改内存中 List 中项目的顺序不会导致该顺序在提交时存储在数据库中。

注释仅在从数据库中检索集合时适用。这意味着,顺序不会存储在数据库中,但是当从数据库中检索数据并将其存储到内存中的 List 集合时,它们将被排序。

@OrderColumn

OrderColumn 注解指定了一个列,用于维护列表的持久顺序。示例:

@OrderColumn(name="ROOM_ORDER")
private List<Room> rooms;

这意味着您有一个名为“ROOM_ORDER”的附加列,它将指示您的项目在表格中的顺序。

关于java - JPA : How to save list with order in a many-to-many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33123035/

相关文章:

java - 我该如何进行以下 hibernate 映射?

javascript - 如何在 Ember.js 中保存具有多对多关系的模型?

python - 使用具有多对多关系的 Post 方法的 Django Rest-Framework 错误

java - 使用 netbeans 7.1 自动开发 osgi 包

java - Java中的Serializable接口(interface)虽然没有方法,没有字段,但是可以实现它的功能。如何?

java - 是否可以在 javaFx 中为 Node 对象添加 css 类?

java - 双向一对多关系不起作用

java - JPA 2.0/hibernate : Why does LAZY fetching with "@OneToOne" work out of the box?

java - DMS的JCR与JPA:性能,优点,缺点

ruby-on-rails - 访问存储在使用 #create_join_table 创建的连接表中的连接模型属性