Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打开JPA级联删除问题_Java_Jpa_Openjpa - Fatal编程技术网

Java 打开JPA级联删除问题

Java 打开JPA级联删除问题,java,jpa,openjpa,Java,Jpa,Openjpa,我有如下实体: @Entity @Table(name = "BENEFICIARY") public class Beneficiary { //other fields from entity @OneToOne(cascade = CascadeType.ALL) @JoinColumn(name = "BENEFICIARY_BANK_ID", nullable = false) private Bank beneficiaryBank; } 通过调用entitymanager.r

我有如下实体:

@Entity
@Table(name = "BENEFICIARY")
public class Beneficiary {

//other fields from entity

@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "BENEFICIARY_BANK_ID", nullable = false)
private Bank beneficiaryBank;
}
通过调用entitymanager.remove删除受益人

@Override
public void remove(E entity) {
entityManager.remove(entity);
}
但有时我会出现如下错误:

Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: The DELETE statement conflicted with the REFERENCE constraint "FK_BENEFIC_BENEF_5629CD9C". The conflict occurred in database "XXXX_DB", table "dbo.BENEFICIARY", column 'BENEFICIARY_BANK_ID'. {prepstmnt 596583311 DELETE FROM dbo.BANK WHERE ID = ? [params=?]} [code=547, state=23000]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:273)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:261)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$1200(LoggingConnectionDecorator.java:70)
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeBatch(LoggingConnectionDecorator.java:1187)
at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeBatch(DelegatingPreparedStatement.java:260)
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeBatch(JDBCStoreManager.java:1720)
at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.executeBatch(BatchingPreparedStatementManagerImpl.java:356)
at org.apache.openjpa.jdbc.kernel.BatchingPreparedStatementManagerImpl.flushBatch(BatchingPreparedStatementManagerImpl.java:187)
... 56 more
---- Begin backtrace for Nested Throwables
看起来异常是由于jpa试图在银行表数据之前删除受益人表数据而导致的。我不知道为什么会发生这种情况,因为我给出了一个CascadeType。JPA应该首先从受益人处删除数据,然后从银行表中删除数据 有人知道这个问题的解决方案吗


提前感谢。

请指定JPAI的版本,因为级联删除的数据也被另一个实体引用,如果允许的话,这将导致完整性约束冲突。也许您需要将要从其他地方级联删除的实体解耦,然后才能工作。JPA不是魔杖,它仍然由你控制。到目前为止,它只能帮助您。我已经检查了BANK表的约束是否与任何其他表耦合。我有相同的问题。似乎openJPA的行为与规范中的定义不符。