persistence.xml和postgresql设置0 == false

时间:2013-01-17 21:16:33

标签: postgresql persistence persistence.xml

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

operator does not exist: integer = boolean

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

PS我使用glassfish v3和toplink作为JPA

1 个答案:

答案 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;

作品.....