从数据库中检索值时,hibernate不会在Set
类型的集合中保留插入顺序,而是将其保留在List
集合中。我试图手动指定LinkedHashSet
,但没有帮助。
我有父母实体
@Entity
@Table(name = "radio")
@PrimaryKeyJoinColumn(name = "id", referencedColumnName = "id")
public class Radio extends AbstractField {
@OneToMany(cascade = CascadeType.ALL)
@JoinColumn(name = "radio_id")
private Set<Choice> choices = new LinkedHashSet<>();
}
和子实体:
@Entity
@Table(name = "choice")
public class ChoiceEntity {
@Id
@GeneratedValue
@Column(name = "id", nullable = false)
private UUID id;
@Column(name = "value")
private String value;
}
当我从数据库中检索值时,hibernate会以随机顺序将它们存储在choices
集合中。当我更改集合类型以使用List
时,一切正常。
是否可以配置hibernate以保持数据集Set
的集合中的数据库顺序,而无需使用任何添加order_row
。
答案 0 :(得分:0)
使用@javax.persistence.OrderBy
或@org.hibernate.annotations.OrderBy
。前者需要在HQL / JPQL中定义的片段,而后者需要SQL片段