我在保存方面有困难...从子表中获取正在运行 这是我的父表pojo
@Entity
@Table(name = "Dei_Resources")
public class DeiResources {
private int id;
private String employeeId;
private Set<DeiResourceType> deiResourceType;
//other setters getters not included
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
@OneToMany(fetch = FetchType.EAGER, mappedBy = "deiResource", cascade = CascadeType.ALL)
public Set<DeiResourceType> getDeiResourceType() {
return deiResourceType;
}
Child Table pojo
@Entity
public class DeiResourceType implements Serializable{
private int id;
private int resourceId;
private String typeValue;
@JsonBackReference
private DeiResources deiResource;
//other setters getters not included
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
public int getId() {
return id;
}
@ManyToOne(fetch=FetchType.LAZY,optional=false)
@JoinColumn(name = "resourceId", referencedColumnName="id",insertable = false, updatable = false)
public DeiResources getDeiResource() {
return deiResource;
}
我有DeiResourcesRepository,在我的服务中我正在尝试这个
DeiResources dei = new DeiResources();
DeiResourceType deii = new DeiResourceType();
Set<DeiResourceType> deiResourceType = new HashSet<DeiResourceType>();
deii.setTypeValue("Driver");
deiResourceType.add(deii);
dei.setEmployeeId("unique1");
dei.setDeiResourceType(deiResourceType);
deiResourcesRepository.save(dei);
获取此错误
[错误] org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ORA-02291: 违反完整性约束(DEI_ADMIN.DEI_RESOURCE_TYPE_R01) - 未找到父键
在DeiResourceType表中,我添加了具有父表ID的外键约束。如何摆脱这个错误,任何建议/帮助?
答案 0 :(得分:0)
首先,在SQL中没有Child / Parent模式。这就是为什么像真正的家庭这样的结构的想象力是错误的。在这个例子中,父母不能是孩子,在现实世界中,作为父母的每个人都是孩子!
我们只有两个关于约束的1-n关系表,每个DeiResource必须有一个DeiResourceType!只要这种约束使其保持完整性,就没有例外。
请注意您调用两个实体的构造函数但只保存一个(在没有DeiResourceType的情况下保存DeiResource)。所以你保存一个没有类型的资源。但是每个 DeiResource必须具有DeiResourceType 的约束被破坏,数据库不再具有完整性并抛出异常!
您有两种选择:
我更希望第二种方法避免表“DeiResourceType”中的重复。
(顺便说一下,theese约束可以推迟,一个古老的,被遗忘的和强大的魔法)