Jpa 单独创建但一起使用的Kotlin数据库实体/对象的可空性
我有两个数据库类,Plan和Strategy以及Hibernate/JPA注释: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
@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
}