0

我们将应用程序从 oracle 迁移到 postgresql。我们遇到了问题,因为许多问题使用 0 作为假。现在我们有很多错误:

operator does not exist: integer = boolean

它可以使用 persistence.xml 中的设置并定义 0 = false 的 postgresql ???

PS 我使用 glassfish v3 和 toplink 作为 JPA

4

1 回答 1

1

问题是 Oracle 没有真正的 bool 类型,但 PostgreSQL 有。因此:

SELECT true = '1';

返回 '​​t' 为真

SELECT true = 1;

产生您遇到的错误。如果您可以更改持久性以与引用(即未知)类型进行比较,那将解决问题。

如果你不能这样做,你可以创建一个自定义运算符:

CREATE OR REPLACE FUNCTION comp_bool(bool, int) RETURNS bool LANGUAGE SQL AS
$$
SELECT $1 = $2::bool;
$$;

CREATE OR REPLACE FUNCTION comp_bool(int, bool) RETURNS bool LANGUAGE SQL AS
$$
SELECT $1::bool = $2;
$$;

CREATE OPERATOR = (
    procedure = comp_bool,
    leftarg = bool,
    rightarg = int,
    commutator = =
);


CREATE OPERATOR = (
    procedure = comp_bool,
    leftarg = int,
    rightarg = bool,
    commutator = =
);

然后

SELECT true = 1;

作品.....

于 2013-04-21T09:40:16.273 回答