我在数据库表上应用了一个触发器。但是当我通过hibernate jpa将数据插入其中时,它会在主表中创建重复的行。 这是触发器
CREATE OR REPLACE FUNCTION SMS_RECEIPT_func_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
IF ( NEW.timedate >= '2015-01-01' AND NEW.timedate < '2015-01-31' ) THEN
INSERT INTO SMS_RECEIPT_y2015m01 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-02-01' AND NEW.timedate < '2015-02-28' ) THEN
INSERT INTO SMS_RECEIPT_y2015m02 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-03-01' AND NEW.timedate < '2015-03-31' ) THEN
INSERT INTO SMS_RECEIPT_y2015m03 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-04-01' AND NEW.timedate < '2015-04-30' ) THEN
INSERT INTO SMS_RECEIPT_y2015m04 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-05-01' AND NEW.timedate < '2015-05-31' ) THEN
INSERT INTO SMS_RECEIPT_y2015m05 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-06-01' AND NEW.timedate < '2015-06-30' ) THEN
INSERT INTO SMS_RECEIPT_y2015m06 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-07-01' AND NEW.timedate < '2015-07-31' ) THEN
INSERT INTO SMS_RECEIPT_y2015m07 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-08-01' AND NEW.timedate < '2015-08-31' ) THEN
INSERT INTO SMS_RECEIPT_y2015m08 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-09-01' AND NEW.timedate < '2015-09-30' ) THEN
INSERT INTO SMS_RECEIPT_y2015m09 VALUES (NEW.*);
ELSIF ( NEW.timedate >= '2015-10-01' AND NEW.timedate < '2015-10-31' ) THEN
INSERT INTO SMS_RECEIPT_y2015m010 VALUES (NEW.*);
ELSE
RAISE EXCEPTION 'Date out of range. Fix the measurement_insert_trigger() function!';
END IF;
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER trigger_SMS_RECEIPT_insert
AFTER INSERT ON "SMS_RECEIPT"
FOR EACH ROW EXECUTE PROCEDURE SMS_RECEIPT_func_insert_trigger();
如果使用Before代替AFTER,它在java中会出现以下错误
CREATE TRIGGER trigger_SMS_RECEIPT_insert
BEFORE INSERT ON "SMS_RECEIPT"
FOR EACH ROW EXECUTE PROCEDURE SMS_RECEIPT_func_insert_trigger();
Caused by: org.hibernate.StaleStateException: Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1
我也试过使用INSTEAD OF取代AFTER之前和之前的
Tables cannot have INSTEAD OF triggers.
我是表分区和使用触发器的新手。我在谷歌搜索了所有这些,并在这里发布了
http://stackoverflow.com/questions/22026354/insert-trigger-ends-up-inserting-duplicate-rows-in-partitioned-table
但它对我没用。
有谁能告诉我如何解决这个问题。
答案 0 :(得分:0)
将RETURN NEW
设为触发器