在启动时导入PostgreSQL触发器hibernate

【字号: 日期:2024-04-03浏览:21作者:雯心
(adsbygoogle = window.adsbygoogle || []).push({}); 如何解决在启动时导入PostgreSQL触发器hibernate?

创建一个@Startup@SingletonEJB,并在调用该@postconstruct方法的方法时调用所需的过程。您不能直接从sql调用它,因为它是一个触发过程,但是您可以:

INSERT,UPDATE或DELETE连续some_entity触发扳机;或更明智

定义一个单独的过程,其名称类似于log_startup返回的内容,void因此可以从sql中将其调用为SELECT log_startup(),并具有以下内容:

INSERT INTO logger SELECT ’S’, Now(), user, NULL;

管他呢。

您可以log_startup使用诸如此类的本机查询进行调用SELECTlog_startup(),并且还应该可以使用JDBC或HQL存储过程调用语法{call log_startup()}(未经测试)。

你根本无法直接调用触发程序,所以 没有办法 有 ,准确的功能 上部署运行。

解决方法

我在PostgreSQL中有一些存储的函数和触发器。例如:

CREATE OR REPLACE FUNCTION log_function() RETURNS TRIGGER AS $logger$BEGIN IF (TG_OP = ’DELETE’) THENINSERT INTO logger SELECT ’D’,now(),user,OLD.*;RETURN OLD; END IF; RETURN NULL; END;$logger$ LANGUAGE plpgsql;

并触发:

CREATE TRIGGER logging_triggerAFTER INSERT OR UPDATE OR DELETE ON some_entity FOR EACH ROW EXECUTE PROCEDURE log_function();

我想在每次部署后导入此代码。(我有<property name='hibernate.hbm2ddl.auto' value='create-drop'/>)

我认为对于函数来说这是不可能的,因为它具有plpgsql,但是对于触发器来说则是很棒的。我一直在尝试将触发器添加到import.sql,但是我已经org.postgresql.util.PSQLException:ERROR: syntax error at end of input

而且我不想将此代码移至Java级别。

有任何想法吗?

相关文章: