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