老张聊天 2014-04-27 04:24 采纳率: 0%
浏览 1096

oracle触发器中使用like语句,和hibernate共同使用时失效,怎么办?

我定义了一个触发器,主要功能是做一个表数据的同步,如果直接用toad增加数据,触发器可正常执行,但是靠hibernate新增数据之类,触发器中like语句一直返回false的结果。求解决办法!!
下面是我的触发器:
CREATE OR REPLACE TRIGGER NOTXSI
AFTER INSERT
ON ELEMENT
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
BEGIN
delete from my_sales.ELEMENT tt where tt.fd_id=:new.fd_id and tt.fd_hierarchy_id like '%7e77%';
EXCEPTION
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END notxiaosi;

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-02 00:29
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Oracle触发器中,你可以使用LIKE表达式来匹配特定模式或字符串。然而,在Hibernate中,你需要确保你的数据模型与Oracle数据库具有良好的映射。

    首先,请检查以下几点:

    1. 确保你的ELEMENT表有正确的索引设置(例如fd_idfd_hierarchy_id)以支持LIKE查询。
    2. 在触发器中,尝试将LIKE表达式替换为INSTR函数,这通常比LIKE更可靠地匹配字符串。
    3. 如果可能的话,考虑使用ORM工具(如Hibernate或JPA),以便更好地处理数据库和对象之间的映射关系。

    此外,你还可以尝试调整你的INSERT操作,使其不依赖于LIKE查询。例如,可以使用UPDATE操作来更新表中的行,并使用DELETE操作来删除不需要的行。这样可以在不影响触发器性能的情况下保持一致性。

    最后,如果你遇到任何问题,请提供详细的错误信息,包括你在Oracle数据库上运行的所有命令以及你在Hibernate中使用的所有参数。

    评论

报告相同问题?