2013-03-05 7 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 

Come si può vedere 9 cifre per Integer non porta a valori negativi nel tipo Integer.Lunghezza della chiave primaria per il tipo di dati Long in Java (e Iberna)?

Ma 19 cifre in Long possono causare segno di troppo pieno ... Io di solito vedo NUMBER(18) come tipo di colonna ID ...

E 'possibile avere un problema con la mappatura NUMBER(19) per Long in Hibernate?

+0

Impossibile capire: quanto la lunghezza della colonna nella tabella in oracolo influisce sulla possibilità di ottenere numeri negativi nell'ID da Hibernate? – Andremoniy

+0

'log (9'999'999'999'999'999'999)/log (2) = ~ 63.1166338029' quindi non è possibile mantenere questo valore in 63 bit (notare che ci sono 19 di' 9'). Quindi verrà usato il bit di segno ... E probabilmente l'errore di lancio di Hibernate. Questa è una domanda ... – gavenkoa

+0

Ok, questa è una risposta: potrebbe essere usato il bit di segno. Quindi qual è la domanda? – Andremoniy

risposta

2

Non utilizzare a lungo: è destinato ai numeri. Non moltiplichi mai, aggiungi, sottrai PK. (probabilmente nemmeno li ordinerai). Per il tipo di dati Oracle NUMBER utilizzare oracle.sql.NUMBER o java.math.BigDecimal.

+0

Hm ... Non usare mai 'String' perché non li concatenò mai/cercarli. Ma hai ragione che per * grande NUMERO * devo usare java.math.BigDecimal per il campo id! +1 – gavenkoa