我们将应用程序从 oracle 迁移到 postgresql。我们遇到了问题,因为许多问题使用 0 作为假。现在我们有很多错误:
operator does not exist: integer = boolean
它可以使用 persistence.xml 中的设置并定义 0 = false 的 postgresql ???
PS 我使用 glassfish v3 和 toplink 作为 JPA
我们将应用程序从 oracle 迁移到 postgresql。我们遇到了问题,因为许多问题使用 0 作为假。现在我们有很多错误:
operator does not exist: integer = boolean
它可以使用 persistence.xml 中的设置并定义 0 = false 的 postgresql ???
PS 我使用 glassfish v3 和 toplink 作为 JPA
问题是 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;
作品.....