2012-06-08 19 views
8

Tôi đang sử dụng API javax.persistence và Hibernate để tạo chú thích và thực thể tồn tại và thuộc tính của chúng trong cơ sở dữ liệu Oracle 11g Express.Độ chính xác lớn nhất không được duy trì bằng chú thích JPA

tôi có các thuộc tính sau đây trong một thực thể:

@Column(precision = 12, scale = 9) 
private BigDecimal weightedScore; 

Mục đích là để tồn tại một giá trị thập phân với tối đa 12 chữ số và tối đa là 9 của những chữ số bên phải của nơi thập phân.

Sau khi tính weightedScore, kết quả là 0,1234, nhưng khi tôi cam kết thực thể với cơ sở dữ liệu Oracle, giá trị hiển thị là 0,12.

Tôi có thể thấy điều này bằng cách sử dụng đối tượng EntityManager để truy vấn mục nhập hoặc xem trực tiếp trong giao diện Oracle Application Express (Apex) trong trình duyệt web.

Tôi nên chú thích thuộc tính BigDecimal để độ chính xác được duy trì chính xác như thế nào?

Lưu ý: Chúng tôi sử dụng cơ sở dữ liệu HSQL trong bộ nhớ để chạy thử nghiệm đơn vị của chúng tôi và không gặp sự cố với thiếu chính xác, có hoặc không có chú thích @Column.

Cập nhật:

Nhìn vào mô tả bảng, định nghĩa của cột weightedScoreNUMBER(19, 2). Bây giờ tôi cũng đã thử thay đổi chú thích thành @Column(columnDefinition="Number(12, 9)"), nhưng điều này không có hiệu lực. Có ai biết tại sao Oracle không phản hồi những chú thích này?

Trả lời

5

Tôi tìm thấy câu trả lời. Huzzah!

Tôi đã cố gắng để thực hiện truy vấn sau đây thông qua giao diện Oracle Apex:

alter table NODE modify (WEIGHTEDSCORE NUMBER(12, 9));

tôi nhận được một lỗi nói rằng một cột chứa dữ liệu không thể được sửa đổi để chỉ còn lại ít chính xác hoặc quy mô ít hơn. Đây là vấn đề của tôi!

Vì tôi đã cố gắng thay đổi bảng bằng dữ liệu hiện có, tôi cần phải thả bảng và khởi tạo lại bảng hoặc thay đổi cột để chỉ có độ chính xác và tỷ lệ lớn hơn.

Tôi đã cố gắng truy vấn sau đây với thành công:

alter table NODE modify (WEIGHTEDSCORE NUMBER(26, 9));

Lý do là tôi muốn thêm 7 địa điểm chính xác ở bên phải dấu thập phân, vì vậy tôi đang bổ sung thêm 7 đến độ chính xác tổng thể để bù đắp cho sự gia tăng quy mô. Bằng cách đó, cột có thể giữ tất cả độ chính xác hiện tại ở bên trái của số thập phân trong khi thêm độ chính xác ở bên phải.

1

Có vẻ như bạn không phải là người duy nhất gặp rắc rối với điều này: http://www.eclipse.org/forums/index.php/m/716826/

+0

Báo cáo lỗi cũng cho biết lỗi chỉ áp dụng cho các giá trị lớn hơn 9,223,372,036,854,775,808 và nó đã được _fixed_. – Ben