Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/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 Hibernate无法添加或更新子行问题_Java_Spring_Hibernate - Fatal编程技术网

Java Hibernate无法添加或更新子行问题

Java Hibernate无法添加或更新子行问题,java,spring,hibernate,Java,Spring,Hibernate,我有这种关系 @OneToOne(orphanRemoval = true, optional = true, cascade = {CascadeType.ALL}, mappedBy = "publicProcurement", fetch = FetchType.LAZY) @Getter @Setter private Announcement announcement; @OneToOne @JoinColumn(name = "public_procurement_id", n

我有这种关系

@OneToOne(orphanRemoval = true, optional = true, cascade = {CascadeType.ALL},  mappedBy = "publicProcurement", fetch = FetchType.LAZY)
@Getter
@Setter
private Announcement announcement;


@OneToOne
@JoinColumn(name = "public_procurement_id", nullable = false, insertable = false, updatable = false)
@Getter
@Setter
private PublicProcurement publicProcurement;
这里是我的外键约束

 <addForeignKeyConstraint baseColumnNames="public_procurement_id" baseTableName="announcement" constraintName="announcement_public_procurement_ibfk_1" onDelete="RESTRICT" onUpdate="RESTRICT" referencedColumnNames="id" referencedTableName="public_procurement"/>
但当我保存announcementService.save(announcement)时;我收到以下例外情况

Caused by: java.sql.SQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`etendering_test`.`announcement`, CONSTRAINT `announcement_public_procurement_ibfk_1` FOREIGN KEY (`public_procurement_id`) REFERENCES `public_procurement` (`id`))
at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:132) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.MySQLStatement.executeQueryEpilog(MySQLStatement.java:266) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:289) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.MySQLStatement.executeUpdate(MySQLStatement.java:317) ~[mariadb-java-client-1.1.2.jar:na]
at org.mariadb.jdbc.MySQLPreparedStatement.executeUpdate(MySQLPreparedStatement.java:150) ~[mariadb-java-client-1.1.2.jar:na]
at org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.executeUpdate(ResultSetReturnImpl.java:133) ~[hibernate-core-4.2.7.Final.jar:4.2.7.Final]
我什么都试过了,但我不知道Hibernate有什么问题。有什么想法吗,伙计们


注意。

我认为您在本例中错误地设置了插入优先级,因此在保存“announcement”对象之前,您必须确保数据库中已存在具有约束ID的publicProcerument:

也许你应该试着在下面重新订购:

announcementService.save(announcement);
publicProcurement.setAnnouncement(announcement);
save(publicProcurement);
致:

并删除注释insertable=false,updateable=false


如果这不能帮助您解决问题,那么最好让我看看您的全部实体。

您是否在交易中执行
addAnnouncement()
?如果没有,两个
save()
调用将独立完成,在它们之间的一瞬间,外键将被违反。是的,它是在@Service/@Transaction上完成的。它不起作用。同样的问题。我的实体没有其他东西。真奇怪!。
announcementService.save(announcement);
publicProcurement.setAnnouncement(announcement);
save(publicProcurement);
publicProcurement.setAnnouncement(announcement);
save(publicProcurement);
announcementService.save(announcement);