Spring JPA在保存时插入空外键(一对一双向Map)

mccptt67  于 2023-01-20  发布在  Spring
关注(0)|答案(1)|浏览(173)

我在使用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。
我不知道我在这里做错了什么..任何帮助都非常感谢

blmhpbnm

blmhpbnm1#

EventAddress是否设置了事件引用?event_address中的外键由EventAddress.event属性控制,因此如果不设置,它将为空-这是双向关系的常见问题;始终设置双方,因为您负责保持模型与数据库中的内容同步。2当关系的拥有方不同步时,JPA将查看它们来设置外键。

相关问题