在使用JPA的eclipselink实现开发Eclipse GEF应用程序时,我发现了一段令我烦恼的错误:
我有三个不同的类:
第一个代表模型中包含的变量:
@Entity
public class Variable extends AbstractVariable{
@Id
@Generated value
private int id;
/** Lots more of stuff */
@ManyToOne(cascade=CascadeType.ALL)
Model model;
//Setters, getters and the other functions.
}
abstractvariant类的另一个子类,它是一个可以保存变量串联的变量。
@Entity
public class VariableList extends AbstractVariable{
@Id
@Generated value
private int id;
/** Lots more of stuff */
@ManyToMany(cascade=CascadeType.ALL)
List<AbstractVariable> variables;
//Setters, getters and the other functions.
}
第二个类,一个可以保存变量值的gef editpart。
@Entity
public class VariableEditPart{
@Id
@Generated value
private int id;
/** Lots more of stuff */
VariableList vars;
//Setters, getters and the other functions.
}
使用gef模型的最后一节课:
@Entity
public class Model{
@Id
@Generated value
private int id;
/** Lots more of stuff */
@OneToMany(cascade=CascadeType.ALL)
List<Variable> availableVars;
@OneToMany(cascade=CascadeType.ALL)
List<VariableEditPart> editParts;
//Setters, getters and the other functions.
}
这里的问题是JPA为关系变量list-variable创建了一个表,并且与editpart和variablelist创建了另一个关系,因此,一旦我尝试在一些修改后更新数据库中的模型,它会自动尝试删除变量,并最终导致约束违规错误,因为模型持有的变量列表仍然指向该变量(顺便说一句,我没有假装删除,我测试了很多不同的cascadeType's没有运气就避免它......)。
感谢您的关注并善待我的英语,这不是我的母语;)
答案 0 :(得分:0)
看起来你有一个非常相互关联的模型,所有内容都以循环方式引用所有内容。
你在做什么?删除变量时,是否删除了对它的所有引用?你需要。