在预准备语句中重用匿名参数

时间:2010-05-27 21:07:44

标签: java hibernate

我正在自定义hibernate生成的插入SQL并遇到了问题。当Hibernate自己生成查询时,它会将数据插入表的前两列,但这会导致数据库错误,因为表的所有四列都是不可为空的。要正确执行插入,必须将相同的数据插入到新记录的两列中。这意味着我需要Hibernate将相同的数据绑定到我正在编写的查询(预准备语句)中的两个不同参数。

是否有一些SQL语法允许我以不同于它们绑定的顺序引用绑定到预准备语句的匿名参数?

详情

REF_USER_PAGE_XREF
----------------------------------------
PK FK1 | NETWORK_ID     | VARCHAR2(100)
PK FK1 | PAGE_PATH      | VARCHAR2(1000)
       | USER_LAST_UPDT | VARCHAR2(100)
       | TMSP_LAST_UPDT | DATE

insert into 
    REF_USER_PAGE_XREF(
        NETWORK_ID, 
        PAGE_PATH, 
        TMSP_LAST_UPDT, 
        USER_LAST_UPDT) 
values (
    ?, /* want to insert the same data here */
    ?, 
    ?, /* and here */
    (select 
        to_char(sysdate, 'DD-MON-YY') 
    from 
        dual)

我想在第一个和第三个匿名参数中插入相同的数据。

最终答案 (根据@mdma的回答)

insert into 
    REF_USER_PAGE_XREF(
        NETWORK_ID, 
        PAGE_PATH, 
        USER_LAST_UPDT, 
        TMSP_LAST_UPDT) 
select 
    Param1, 
    Param2, 
    Param1, 
    (select 
        to_char(sysdate, 'DD-MON-YY') 
    from 
        dual) 
from 
    (select 
        ? as Param1, 
        ? as Param2
    from 
        dual) params

1 个答案:

答案 0 :(得分:1)

你可以写

INSERT INTO REF_USER_ROLE_XRE
  SELECT Param1, Param2, Param1, 
    (select to_char(sysdate, 'DD-MON-YY') from  dual)
FROM 
    (SELECT ? AS Param1, ? AS Param2) params