2012-06-08 58 views
8

我正在使用javax.persistence API和Hibernate在Oracle 11g Express數據庫中創建註釋和持久實體及其屬性。BigDecimal精度不會持久保留JPA註釋

我有一個實體以下屬性:

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

我們的目標是堅持一個十進制值最多的12個數字和小數點右邊最多的這些數字9。

計算weightedScore後,結果爲0.1234,但是一旦我將實體提交給Oracle數據庫,則該值顯示爲0.12。

我可以通過使用EntityManager對象查詢條目或直接在Web瀏覽器中的Oracle Application Express(Apex)接口中查看它來查看。

我應該如何註釋我的BigDecimal屬性,以便精確度持續正確?

注意:我們使用內存中的HSQL數據庫來運行我們的單元測試,並且它不會遇到缺少精度的問題,無論是否有@Column註釋。

更新:

望着桌上的描述中,weightedScore列定義爲NUMBER(19, 2)。我現在也嘗試將註釋更改爲@Column(columnDefinition="Number(12, 9)"),但這不起作用。有誰知道爲什麼Oracle對這些註釋沒有反應?

回答

5

我找到了答案。好哇!

我試圖通過Oracle的Apex接口來執行以下查詢:

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

我接收到錯誤消息,說明了包含數據的列不能被修改以具有較少的精度或小數以下。這是我的問題!

因爲我試圖用現有數據來改變表格,我需要刪除表格並重新初始化它,或者改變列以使其具有更高的精度和縮放比例。

我嘗試與成功以下查詢:

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

的理由是,我想至7位的精度添加到小數點右邊,所以我加入7整體精度彌補規模的增加。這樣,該列可以保留小數點左側的所有現有精度,同時在右側添加精度。