gpt4 book ai didi

java - JPA (EclipseLink) 列表顺序

转载 作者:行者123 更新时间:2023-11-29 05:21:47 25 4
gpt4 key购买 nike

我在使用 EclipseLink 时在持久化期间保持列表顺序时遇到了一些问题。我是否缺少 EclipseLink 中的某些设置,或者忘记使用某些注释?

我有两个看起来有点像这样的类:

@Entity
@Table(name = "sequence")
public final class Sequence {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "sequence")
private List<Run> runs;

// Other fields
// ...
}

@Entity
@Table(name = "run")
public final class Run {

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

@ManyToOne
@JoinColumn(name = "seq_id", nullable = false)
private Sequence sequence;

@Column(nullable = false)
private String comment;

// Other fields
// ...
}

现在,我希望当我将后一个类的实例添加到前一个类时,列表中的顺序将在持久化时保持不变:

Run a = new Run();
a.setComment("a");

Run b = new Run();
b.setComment("b");

List<Run> runs = new LinkedList<Run>();
runs.add(a);
runs.add(b);

Sequence seq = new Sequence();
seq.setRuns(runs);

persist(seq); // order in database should be "a", then "b"

但是,当我检查数据库时,并不总是实例a 获得比b 更低的标识符;它似乎表现得好像列表只是一个桶。

使用持久化时如何保持列表的顺序?如果在 b 之前添加实例 a,我想保留数据库中的顺序,因为条目是顺序执行测试的结果,必须保留顺序。

感谢您的帮助!

最佳答案

如果你想保持顺序,你需要一个@OrderColumn 注释——默认情况下,集合以“包”语义保存(不涉及顺序)。这可以添加到 OneToMany 或 ManyToOne 注释上。

类似于:

@OneToMany(cascade = CascadeType.PERSIST, mappedBy = "sequence")
@OrderColumn
private List<Run> runs;

参见 http://docs.oracle.com/javaee/6/api/javax/persistence/OrderColumn.html获取信息。

关于java - JPA (EclipseLink) 列表顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24361376/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com