代码之家  ›  专栏  ›  技术社区  ›  andrew

JPA-用@OrderBy注释的列表不订购项目[重复]

  •  1
  • andrew  · 技术社区  · 7 年前
    @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:cannotmakeorderbywork”。对那个问题的回答给了我正确的方向。 要使测试通过,我需要在访问存储库之前调用以下函数:

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

    之后 entityManager

    @Inject
    private lateinit var entityManager: EntityManager
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   ℛɑƒæÄ¿á´¿á´¹á´¿    7 年前

    你可以摆脱标准的JPA @javax.persistence.OrderBy ,请尝试其中一个Hibernate排序选项,或者 @org.hibernate.annotations.Sort @org.hibernate.annotations.OrderBy .

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