我有三个实体 -JPA:限制违反了删除
public class ApplicationEntity extends ModelEntity implements Application {
@ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
private CategoryEntity category;
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
@JoinTable(
joinColumns = {@JoinColumn(name = "APPLICATION_ID")},
inverseJoinColumns = {@JoinColumn(name = "USER_ID")},
uniqueConstraints = {@UniqueConstraint(columnNames = {"APPLICATION_ID", "USER_ID"})
})
private List<UserEntity> buyers = new ArrayList<UserEntity>();}
public class CategoryEntity extends ModelEntity implements Category {
@Column(nullable = false)
private String name;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private List<ApplicationEntity> applications = new ArrayList<ApplicationEntity>();
}
public class UserEntity extends AbstractEntity implements User {
}
当我尝试删除AppliationEntity,我得到一个约束违反异常。我试图从CategoryEntity中删除应用程序条目,然后删除ApplicationEntity。但仍然失败。例外是类似的 -
Caused by: java.sql.SQLException: DELETE on table 'APPLICATIONENTITY' caused a violation of foreign key constraint 'FK109DF15D362F642' for key (32779). The statement has been rolled back.
at org.apache.derby.impl.jdbc.SQLExceptionFactory.getSQLException(Unknown Source)
at org.apache.derby.impl.jdbc.SQLExceptionFactory40.wrapArgsForTransportAcrossDRDA(Unknown Source)
... 61 more
Caused by: ERROR 23503: DELETE on table 'APPLICATIONENTITY' caused a violation of foreign key constraint 'FK109DF15D362F642' for key (32779). The statement has been rolled back.
任何建议,非常感谢。提前致谢。
感谢您的回复。好的,那我该如何删除一个ApplicationEntity,但不是Cateogry或UserEntity? 另外,是不是如果我将CascadeType.REMOVE添加到ApplicationEntity的类别字段,那么删除应用程序实体时类别实体将被删除? 商业案例就像一个类别可以有0 .. *个应用程序。删除应用程序时,不应删除类别。 – Jahid 2011-05-09 12:23:19
你好Gursel,谢谢你的回复。我已将CascadeType.REMOVE添加到ApplicationEntity的类别字段,但我仍然收到异常 – Jahid 2011-05-11 04:41:02
@Jahid,应该有另一个与ApplicationEntity表的外键关系。您应该检查数据库中的FK109DF15D362F642外键约束。 – 2011-05-11 06:48:30