2013-01-17 86 views
0

我們將我們的應用程序從oracle遷移到postgresql。而且我們遇到了問題,因爲許多使用0的問題都是錯誤的。現在我們有很多錯誤:persistence.xml和postgresql設置0 == false

operator does not exist: integer = boolean 

它可能使用persistence.xml中的設置並定義postgresql 0 = false?

PS我使用的GlassFish v3和排名靠前的JPA

+0

看樣子你是一個比較布爾與一個整數。演員陣容不是隱含的,所以你必須明確地施放它。 – wildplasser

+0

是oracle使用0或1,但postgresql真/假 它的posible容易遷移這個東西? –

+0

這取決於。它是代碼嗎?只有幾個疑問?許多疑問?你可以編輯和添加一個expicit強制。或者在導入時更改數據類型,稍後可能會更改它。或者使用UDF來完成此操作(但仍然可以編輯)或者:向pg-source添加默認強制(可能不可能,並且非常困難,不適用於模糊 - 心臟;類型系統是健壯的,但容易打破,恕我直言)BTW:請添加代碼片段... – wildplasser

回答

1

的問題是,甲骨文沒有真正的布爾類型,但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; 

作品.....