2013-03-05 35 views
5
 
log(2^32)/log(10) =~ 9.63295986126 
log(10^0.63295986126)/log(2) =~ 2.10264714605 > 2 bit 

log(2^64)/log(10) =~ 19.2659197225 
log(10^0.2659197225)/log(2) =~ 0.883366197155 < 2 bit 

Như bạn có thể thấy 9 chữ số cho Integer không dẫn đến giá trị âm trong loại Integer.Độ dài của khóa chính cho kiểu dữ liệu dài trong Java (và Hibernate)?

Nhưng 19 chữ số trong Long có thể gây ra dấu hiệu tràn ... Tôi thường thấy NUMBER(18) as type của cột ID ...

Có thể có vấn đề với bản đồ NUMBER(19) để Long trong Hibernate?

+0

Không thể hiểu được: độ dài của cột trong bảng trong oracle ảnh hưởng đến khả năng đạt được số âm trong ID từ Hibernate? – Andremoniy

+0

'log (9'999'999'999'999'999'999)/log (2) = ~ 63.1166338029' để bạn không thể giữ giá trị này trong 63 bit (lưu ý có 19 trong số' 9'). Vì vậy, bit dấu sẽ được sử dụng ... Và có thể là lỗi ném Hibernate. Đó là một câu hỏi ... – gavenkoa

+0

Ok, đó là câu trả lời: bit dấu có thể được sử dụng. Vậy câu hỏi là gì? – Andremoniy

Trả lời

2

Không sử dụng Long - nó dành cho số. Bạn không bao giờ nhân, cộng, trừ PK. (bạn thậm chí có thể không bao giờ sắp xếp chúng). Đối với Oracle datatype NUMBER, hãy sử dụng oracle.sql.NUMBER hoặc java.math.BigDecimal.

+0

Hm ... Không bao giờ sử dụng 'Chuỗi' vì tôi không bao giờ nối/tìm kiếm chúng. Nhưng bạn là đúng cho * lớn NUMBER * Tôi phải sử dụng java.math.BigDecimal cho trường id! +1 – gavenkoa

Các vấn đề liên quan