Java 为什么Hibernate不更新OneTONE关系的外键列?
表t1有一列f_id,这是它的主键。表t2有一列f\u integration\u id,它引用了表t1中的f\u id列Java 为什么Hibernate不更新OneTONE关系的外键列?,java,hibernate,jpa,hibernate-mapping,one-to-one,Java,Hibernate,Jpa,Hibernate Mapping,One To One,表t1有一列f_id,这是它的主键。表t2有一列f\u integration\u id,它引用了表t1中的f\u id列 现在,当我试图保存对象1时,它在两个表t1和t2中创建了两行。但是表t2中的外键列仍然是NULL。有人能告诉我为什么会这样吗?虽然这对一对夫妻关系来说是一种魅力。我认为问题就在下面一行。您的设置可更新且可插入为false。所以它不会插入或更新。你可以参考这个 我认为问题在下面一行。您的设置可更新且可插入为false。所以它不会插入或更新。你可以参考这个 你应该提供实体持久性
现在,当我试图保存对象1时,它在两个表t1和t2中创建了两行。但是表t2中的外键列仍然是NULL。有人能告诉我为什么会这样吗?虽然这对一对夫妻关系来说是一种魅力。我认为问题就在下面一行。您的设置可更新且可插入为false。所以它不会插入或更新。你可以参考这个
我认为问题在下面一行。您的设置可更新且可插入为false。所以它不会插入或更新。你可以参考这个
你应该提供实体持久性代码。嘿@alexvaluiskyi没有太多持久性代码。我正在扩展JPA职位,而不是实体经理。所以持久性代码就是repository.saveAndFlush(object1)我的意思是创建实体并将其保存到数据库的服务方法。如果您签入我提供的代码段,您必须同时指定两个边对象关系。我在Object1和Object2中都定义了双向映射。您应该设置两个边关系:
Object1.setObject2(Object2);object2.setObject1(object1)代码>在持久化之前,你应该提供实体持久化代码。我正在扩展JPA职位,而不是实体经理。所以持久性代码就是repository.saveAndFlush(object1)
我的意思是创建实体并将其保存到数据库的服务方法。如果您签入我提供的代码段,您必须同时指定两个边对象关系。我在Object1和Object2中都定义了双向映射。您应该设置两个边关系:Object1.setObject2(Object2);object2.setObject1(object1)代码>在持久化之前
@Entity
@Table(name = "t1")
public class Object1 {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "f_id")
private Long id;
@OneToOne(cascade = {CascadeType.ALL},mappedBy = "object1")
private Object2 object2;
}
@Entity
@Table(name = "t2")
public class Object2 {
@Id
@Column(name = "f_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToOne
@JoinColumn(referencedColumnName = "f_id",name = "f_integration_id",insertable = false, updatable = false)
private Object1 object1;
}
@JoinColumn(referencedColumnName = "f_id",name = "f_integration_id",insertable = false, updatable = false)