Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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_Mysql_Spring_Hibernate - Fatal编程技术网

Java 为什么我的触发器不能与Hibernate一起工作?

Java 为什么我的触发器不能与Hibernate一起工作?,java,mysql,spring,hibernate,Java,Mysql,Spring,Hibernate,我有一个JavaSpring启动项目,我在这个项目中使用Hibernate。我有一个void deleteAll(List idList)方法,它的查询是@query(value=“DELETE c FROM Course c,其中c.id in:idList”,nativeQuery=true)。我想在每次删除操作后使用触发器。我在mysql中创建了一个触发器,当我在mysql中尝试时它可以工作,但是当我调用voiddeleteall(List idList)方法时它就不工作了。如何在hibe

我有一个JavaSpring启动项目,我在这个项目中使用Hibernate。我有一个
void deleteAll(List idList)
方法,它的查询是
@query(value=“DELETE c FROM Course c,其中c.id in:idList”,nativeQuery=true)
。我想在每次删除操作后使用触发器。我在mysql中创建了一个触发器,当我在mysql中尝试时它可以工作,但是当我调用
voiddeleteall(List idList)
方法时它就不工作了。如何在hibernate中使用触发器

我的触发定义:

DELIMITER $$
CREATE TRIGGER after_delete_course AFTER DELETE ON course FOR EACH ROW
BEGIN
    DELETE tc1 FROM table1_course tc1 WHERE tc1.course_id = OLD.id;
    DELETE tc2 FROM table2_course tc2 WHERE tc2.course_id = OLD.id;
    DELETE tc3 FROM table3_course tc3 WHERE tc3.course_id = OLD.id;
END$$
DELIMITER ;
调用deleteAll时hibernate生成的SQL:

Hibernate: 
    DELETE c 
    FROM
        Course c 
    WHERE
        c.id in (
            ?
        )

另一种解决方案是使用JPA提供的实体生命周期注释

在这种情况下,您正在执行删除操作。因此,您可以使用
@PreRemove
注释


您可以查看一些示例

如何知道它不起作用?您不会看到触发器的删除查询记录在应用程序中,这只发生在DBMS端。
如果您有一个
EntityManager
,其中包含被删除的实体或被触发器删除的关联,则必须将它们从
EntityManager
中分离出来,以再次获得一致的视图,因为Hibernate不知道DML语句会对受管实体产生什么影响。尝试使用
EntityManager。执行此DML语句后清除

请显示触发器定义。我编辑了问题@SternKmaybe
deleteAll(List idList)
是否不提交事务?方法调用后,
课程
中的行是否被删除?该方法有效,但它仅删除课程,而不是table1\u课程、table1\u课程和table1\u课程@调用deleteAll时由hibernate生成的FantagHiroccShow SQL