Я хочу создать @OneToOne
однонаправленную связь, используя идентификаторы. Давайте рассмотрим следующий пример:
@Table(name = "user")
@Entity
class User (
@Id
@GeneratedValue(...)
var id: Long? = null,
@OneToOne
var address: UserAddress? = null
)
@Table(name = "user_address")
@Entity
class UserAddress(
@Id
var id: Long? = null,
(...)
)
В базе данных существует ограничение внешнего ключа для user_address.id
ссылки user.id
. Я пытался использовать много разных комбинаций аннотаций, но у меня все еще была проблема с удалением. Я использую JpaRepository пользователя, и когда вызывается userRepository.deleteById(id)
, удаляется только дочерний (address
), но не родитель (user
). Я действительно хотел бы сохранить @Id
столбцы с именем «id». Это вообще возможно?
РЕДАКТИРОВАТЬ
Когда я использую следующий код:
@Table(name = "user")
@Entity
class User (
@Id
@GeneratedValue(...)
var id: Long? = null,
@OneToOne(cascade = [CascadeType.All])
@JoinColumn(name = "id", referencedColumnName = "id")
var address: UserAddress? = null
)
@Table(name = "user_address")
@Entity
class UserAddress(
@Id
var id: Long? = null,
@OneToOne(mappedBy = "address")
var user: User? = null
(...)
)
Когда вызывается userRepository.deleteById(id)
, удаляется только дочерний элемент , Я понятия не имею, почему ... Кроме того, я хотел бы сохранить это отношение однонаправленным.
РЕДАКТИРОВАТЬ Репозиторий пользователя
@Repository
interface UserRepository : JpaRepository<User, Long> {
}
РЕДАКТИРОВАТЬ - РЕШЕНО ок. У меня есть другая сущность (назовем это Company), которая имеет Set<User>
. Оказывается, при его получении Fetch. EAGER предотвращает удаление пользователя ... Спасибо всем за ваше время. Я понятия не имел, что это может быть проблемой, поэтому я не упомянул об этом ...