0
在遷移到PostgreSQL,我面臨跌破發行不兼容的類型:numeric和bigint。在PostgeSQL
鍵列veh_reg_authority
和id
是不相容的類型:numeric
和bigint
。 下面是映射:
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "VEH_REG_AUTHORITY", columnDefinition ="Numeric(12,0)")
private VehicleRegistrationAuthority vehicleRegistrationAuthority;
VehicleRegistrationAuthority
具有Long
類型的id
所以其在轉換到BIGINT
按的PostgreSQL。
因此,一個簡單的解決方案是相應地更改columnDefinition =「Numeric(12,0)」,但我們不能這樣做,因爲它可以很好地與oracle和mysql一起使用,並且它已經在代碼中大量使用,所以不可能改變。
以下是在Oracle,MySQL等,和PostgreSQL類型:
column java type Oracle Mysql PostGreSQL
id Long NUMBER BIGINT BIGINT
veh_reg_authority VehicleRegistrationAuthority NUMBER decimal(12,0) NUMERIC
在創建外鍵休眠,給出以下的問題。
Caused by: org.postgresql.util.PSQLException: ERROR: foreign key constraint "fk7gyqskn6x2l2910xhhtjgvh0j" cannot be implemented
Detail: Key columns "veh_reg_authority" and "id" are of incompatible types: numeric and bigint.
實際上,當你使用Long(java類型)時,Hibernate將它映射到java.sql.Types.BIGINT(JDBC類型),如果它映射到postgresql中的BIGINT。對於一些特定的基於精度的數字,我們必須使用Numeric。數字和BIGINT在MYSQL中是兼容的,Oracle對BIGINT和NUMERIC都使用NUMBER,因此在mysql和oracle上沒有問題。 –
您應該對兩列使用相同的Java類型,其他所有內容都是錯誤的。然後問題消失。 –