Java jpa一对一关系问题持续存在时
我有两个一对一关系的模型Java jpa一对一关系问题持续存在时,java,hibernate,spring-data-jpa,Java,Hibernate,Spring Data Jpa,我有两个一对一关系的模型 @Entity @Table(name = "Form_Item_Production") public class FormItemProduction { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "item_id", nullable = false) private Long itemId;
@Entity
@Table(name = "Form_Item_Production")
public class FormItemProduction {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "item_id", nullable = false)
private Long itemId;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "shift_lookup_id", insertable = false, updatable = false)
private AppLookup appLookup;
getter and setter
}
另一个
@Entity
@Table(name = "App_Lookup")
public class AppLookup {
@Id
@GeneratedValue
@Column(name = "Lookup_Id", nullable = false)
private Long lookupId;
@Column(name = "Lookup_Name", length = 30, nullable = false)
private String lookupName;
getter and setter
}
当我试图坚持保存formitemproduction值时
public boolean insertItem(List<FormItemProduction> f) {
for (FormItemProduction i : f) {
System.out.println("A" + i.getAppLookup().getLookupId()); // prints the correct id of applookup
i.setItemId(null);
entityManager.persist(i);
}
entityManager.flush();
return true;
}
据我所知,这是单向的一对一映射,所以我不太明白为什么要分离错误?您有
itemId
,它不能为null
@Column(name=“item\u id”,nullable=false)
私有长项目ID;
实际上,您将itemId
设置为null
i.setItemId(null);
所以这条线
entityManager.persist(i);
无法保存数据。您已将“级联”设置为“全部”:
@OneToOne(cascade = CascadeType.ALL)
这意味着您将所有操作级联到相关字段AppLookup
您可以将cascade设置为none,您将不会再收到错误,但不会对
AppLookup
字段执行db操作。通过更改以下内容进行修复:
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "shift_lookup_id", insertable = false, updatable = false)
private AppLookup appLookup;
致:
@OneToOne(cascade=CascadeType.ALL)
已设置。。。你在说什么?你可以将cascade设置为none他从不分离对象或与之交互,为了持久,ITEMID应该是NULL,所以Hibernate会把它看作一个新的记录并使用插入。query@ArnoldCristobal来自现有formTempProduction
的新记录引用了相同的AppLookup
,该记录打破了@OneToOne
关系。
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "shift_lookup_id", insertable = false, updatable = false)
private AppLookup appLookup;
@OneToOne
@JoinColumn(name = "shift_lookup_id", insertable = true, updatable = true)
private AppLookup appLookup;