Đây là hạn chế đã biết của trình xác thực giản đồ, hãy kiểm tra HHH-2315 . Vì vậy, bạn có ba tùy chọn ở đây (thực tế là bốn nhưng tôi đoán rằng không muốn hủy kích hoạt xác thực). Một trong hai:
-
Sử dụng
float
thay vìdouble
ở cấp độ Java - đây có thể không phải là một tùy chọn. -
Bản vá
org.hibernate.mapping.Table.validateColumns(Dialect dialect, Mapping mapping, TableMetadata tableInfo)
để thêm một điều kiện đặc biệt cho trường hợp cụ thể này - đây thực sự không phải là một lựa chọn nhẹ nhàng. -
Mở rộng
org.hibernate.dialect.Oracle10gDialect
để làm cho nó sử dụngfloat
cho kiểu SQLDOUBLE
public class MyOracle10gDialect extends Oracle10gDialect { public MyOracle10gDialect() { super(); } protected void registerNumericTypeMappings() { super.registerNumericTypeMappings(); registerColumnType( Types.DOUBLE, "float" ); } }
Tùy chọn sau có vẻ an toàn nhưng sẽ yêu cầu một số thử nghiệm để xem liệu nó có đưa ra bất kỳ hồi quy nào hay không. Tôi đã không xem mã trình điều khiển JDBC của Oracle, vì vậy tôi không thể nói cách float
và double precision
khác nhau ở cấp trình điều khiển.