У меня есть два класса базы данных, План и Стратегия с аннотациями 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?
}
@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
}
Вы можете видеть, что есть круговая ссылка, где у каждой Стратегии есть План, а у каждого Плана естьtopStrat.Я почти уверен, что мне нужно сохранить План в базе данных, чтобы он получил автоматически сгенерированный идентификатор.Затем я создаю новую стратегию со своим планом и сохраняю ее, чтобы она тоже получала автоматически сгенерированный идентификатор.Мне нужно оставить Plan.topStrat обнуляемым для создания.
После того, как они созданы, plan.topStrat никогда не должен снова иметь значение null (это бизнес-правило).Так что это странно - звонить myPlan.topStrat !!в полдюжины мест.Есть ли простой стандартный способ борьбы с этим?Какая-то идиома, о которой я не знаю?
Это происходит в нескольких местах в базе данных, над которой я работаю.Другой пример - наша таблица User, которая со временем набрала слишком много столбцов.Мы разделили его на User и User2.У пользователя есть то, что нужно на каждом экране.У User2 есть вещи, к которым иногда обращаются.Мне нужно оставить User.user2 нулевым, чтобы создать пользователя и получить идентификатор.Тогда я думаю, что на самом деле я установил идентификатор User2 равным идентификатору пользователя, к которому он относится (потому что это 1: 1).После сохранения User.user2 уже никогда не может быть пустым.
Это угловой случай, и ничего страшного.Но если есть какой-то простой и элегантный способ справиться с этим, я хотел бы знать.