0

アプリケーションをoracleからpostgresqlに移行します。そして、多くの質問が0をfalseとして使用しているため、問題が発生しています。そして今、私たちは多くのエラーを抱えています:

operator does not exist: integer = boolean

persistence.xmlの設定を使用して、postgresqlを0=falseと定義することが可能です???

PS私はJPAとしてglassfishv3とtoplinkを使用しています

4

1 に答える 1

1

問題は、Oracle には真の bool 型がなく、PostgreSQL にはあることです。結果として:

SELECT true = '1';

true の場合は「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 に答える