Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 单独创建但一起使用的Kotlin数据库实体/对象的可空性_Jpa_Kotlin_Persistence_Nullable_Notnull - Fatal编程技术网

Jpa 单独创建但一起使用的Kotlin数据库实体/对象的可空性

Jpa 单独创建但一起使用的Kotlin数据库实体/对象的可空性,jpa,kotlin,persistence,nullable,notnull,Jpa,Kotlin,Persistence,Nullable,Notnull,我有两个数据库类,Plan和Strategy以及Hibernate/JPA注释: @Entity @Table(name = "plan") class Plan() : Idd { @get:Id @get:GeneratedValue(strategy = IDENTITY) @get:Column(name = "id", unique = true, nullable = false) override var id: Long = 0 @get

我有两个数据库类,Plan和Strategy以及Hibernate/JPA注释:

@Entity
@Table(name = "plan")
class Plan() : Idd {
    @get:Id
    @get:GeneratedValue(strategy = IDENTITY)
    @get:Column(name = "id", unique = true, nullable = false)
    override var id: Long = 0

    @get:ManyToOne(fetch = FetchType.LAZY)
    @get:JoinColumn(name = "top_strat_id", nullable = false)
    var topStrat: Strategy?
}

您可以看到,有一个循环引用,其中每个策略都有一个计划,每个计划都有一个topStrat。我非常确定,我需要将计划持久化到数据库中,以便它获得一个自动生成的ID。然后,我用我的计划创建一个新策略并保存它,以便它也获得一个自动生成的ID。我需要将Plan.topStrat保留为空以便创建

一旦创建了它们,plan.topStrat就不应该再为空(这是一条业务规则)。所以给我的计划打电话有点奇怪。托普斯特拉特!!在六个地方。是否有一些简单的标准方法来处理这个问题?一些我不知道的成语

这发生在我工作的数据库中的几个地方。另一个例子是我们的用户表,它随着时间的推移获得了太多的列。我们将其分为User和User2。用户在每个屏幕上都有需要的东西。User2拥有偶尔访问的东西。我需要将User.user2保留为null以创建用户并获取ID。然后我认为我实际上将user2的ID设置为与其相关的用户ID相等('因为它是1:1)。一旦保存,User.user2就不能再为null

这只是个小案子,没什么大不了的。但是,如果有一些简单而优雅的方法来处理这个问题,我很想知道。

您应该能够使用。尽管您需要注释
@field:
而不是
@get:
,否则JPA提供商在尝试访问它时会抛出

@Entity
@Table(name = "strategy")
class Strategy(
        @get:ManyToOne(fetch = FetchType.LAZY)
        @get:JoinColumn(name = "plan_id", nullable = false)
        var plan: Plan
) : Idd {
    @get:Id
    @get:GeneratedValue(strategy = IDENTITY)
    @get:Column(name = "id", unique = true, nullable = false)
    override var id: Long = 0
}