我在使用Spring JPA进行OneToOne双向Map时遇到问题我有一个Event
和一个与之关联的EventAddress
。每个Event
可以有一个EventAddress
,类似地,每个EventAddress
可以有一个与之关联的Event
。我正在使用CrudRepository
接口插入一个Event
,在该示例中,我首先将一个EventAddress
赋值给Event
,然后使用EventsRepository
save()方法保存它。
以下是我的模型的精简版本:
@Entity(name = "events")
@EntityListeners(AuditingEntityListener::class)
class Event(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var eventId: Long? = null,
@OneToOne(
mappedBy = "event",
cascade = [CascadeType.ALL],
orphanRemoval = true,
fetch = FetchType.LAZY
)
var address: EventAddress? = null,
@CreatedDate
var createdAt: LocalDateTime? = null,
@LastModifiedDate
var updatedAt: LocalDateTime? = null
)
@Entity(name = "event_address")
@EntityListeners(AuditingEntityListener::class)
class EventAddress(
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
var eventAddressId: Long? = null,
@OneToOne(fetch = FetchType.LAZY, cascade = [CascadeType.ALL])
@JoinColumn(name = "event_id")
var event: Event? = null,
@CreatedDate
var createdAt: LocalDateTime? = null,
@LastModifiedDate
var updatedAt: LocalDateTime? = null
)
当我插入一个Event
(它上面有一个地址)时,一行被插入到Event
表中,一行被插入到EventAddress
表中。问题出在EventAddress
表中,外键(event_id)总是NULL。
我不知道我在这里做错了什么..任何帮助都非常感谢
1条答案
按热度按时间blmhpbnm1#
EventAddress是否设置了事件引用?event_address中的外键由EventAddress.event属性控制,因此如果不设置,它将为空-这是双向关系的常见问题;始终设置双方,因为您负责保持模型与数据库中的内容同步。2当关系的拥有方不同步时,JPA将查看它们来设置外键。