JPA-用@OrderBy注释的列表不订购商品

时间:2018-09-19 13:45:15

标签: spring hibernate spring-data-jpa spring-data

@Entity
@Table(name = "some_class")
@SequenceGenerator(name = "default_gen", sequenceName = "some_class_id_seq", allocationSize = 1)
data class SomeClass(

    @OneToMany(mappedBy = "someClass", cascade = [CascadeType.ALL], orphanRemoval = true)
    @OrderBy("date")    
    var items: List<SomeItem>,
) : AbstractEntity()

@Entity
@Table(name = "some_item")
@SequenceGenerator(name = "default_gen", sequenceName = "some_item_id_seq", allocationSize = 1)
data class SomeItem(
    val date: LocalDate,

    @ManyToOne
    @JsonIgnore
    val someClass: SomeClass
) : AbstractEntity()

AbstractEntity包含琐碎的事物,例如id,createdAt等。

我希望项目是一个有序列表,但事实并非如此,它始终按我创建项目的顺序包含项目。

编辑:该问题有点像“ JPA:无法使OrderBy工作”。这个问题的答案为我指明了正确的方向。 为了使测试通过,我需要在访问存储库之前调用以下函数:

private fun clearEntityManagerCache() {
    entityManager.flush()
    entityManager.clear()
    entityManager.entityManagerFactory.cache.evictAll()
}

注入entityManager后:

@Inject
private lateinit var entityManager: EntityManager

1 个答案:

答案 0 :(得分:0)

您可以退出标准JPA @javax.persistence.OrderBy,尝试使用@org.hibernate.annotations.Sort@org.hibernate.annotations.OrderBy的Hibernate排序选项之一。

在域类中添加SQL片段不一定是世界上最优雅的事情,但这可能是最务实的事情。


参考: