代码之家  ›  专栏  ›  技术社区  ›  Geoffrey Wiseman

JPA/Hibernate OrderColumn,不可为空或默认值

  •  0
  • Geoffrey Wiseman  · 技术社区  · 6 年前

    是否可以在Hibernate中使用JPA@order column而不使order列为空或为其提供默认值?

    我有一个现有的数据库,其中一个序列列映射在一个长期的基于Hibernate 3.6的非JPA应用程序中,并且该集合被成功映射如下:

    <list name="requirements" table="MEDICAL_REQUIREMENT" cascade="all-delete-orphan" access="field">
        <key column="applicationId" not-null="true" />
        <list-index column="requirementIndex" />
        <one-to-many class="MedicalRequirement" />
    </list>
    

    正在构建一个API来访问同一个数据库,该数据库可能最终取代现有应用程序的后端,但同时,它们需要共享一个模式。我试着用与Kotlin相同的JPA再现映射:

    @OneToMany(fetch = LAZY, cascade = [ALL], orphanRemoval = true)
    @JoinColumn(name = "applicationId")
    @OrderColumn(name = "requirementIndex", nullable = false)
    private var _medicalRequirements = mutableListOf<MedicalRequirement>()
    

    映射作为一个整体似乎是可行的,但是Hibernate(5.x)尝试在没有order列的情况下编写医疗需求记录,然后(我想,但由于失败,我还没有看到它)在事实发生后更新医嘱。

    我可以理解这种简单性——实体本身不知道顺序,只有父集合知道顺序。话虽如此,如果可以的话,我希望能够使用相同的模式而无需修改。有办法解决这个问题吗?

    关于这个话题我还没有找到太多的讨论,除了在一个日食虫中,日食虫做了同样的事情,显然,虽然我并不真的在乎,因为我用的是Hibernate。;)

    0 回复  |  直到 6 年前