Long oracle Vs Hibernate !?

9 respostas
J

Pessoal alguém sabe como se faz um mapeamento de campos LONG ?

ata Type
Syntax	Oracle 9i	Oracle 10g	Oracle 11g	Explanation
(if applicable)
char(size)	Maximum size of 2000 bytes.	Maximum size of 2000 bytes.	Maximum size of 2000 bytes.	Where size is the number of characters to store. Fixed-length strings. Space padded.
nchar(size)	Maximum size of 2000 bytes.	Maximum size of 2000 bytes.	Maximum size of 2000 bytes.	Where size is the number of characters to store. Fixed-length NLS string Space padded.
nvarchar2(size)	Maximum size of 4000 bytes.	Maximum size of 4000 bytes.	Maximum size of 4000 bytes.	Where size is the number of characters to store. Variable-length NLS string.
varchar2(size)	Maximum size of 4000 bytes.	Maximum size of 4000 bytes.	Maximum size of 4000 bytes.	Where size is the number of characters to store. Variable-length string.
long	Maximum size of 2GB.	Maximum size of 2GB.	Maximum size of 2GB.	Variable-length strings. (backward compatible)
raw	Maximum size of 2000 bytes.	Maximum size of 2000 bytes.	Maximum size of 2000 bytes.	Variable-length binary strings
long raw	Maximum size of 2GB.	Maximum size of 2GB.	Maximum size of 2GB.	Variable-length binary strings. (backward compatible)

9 Respostas

V

ao invés de usar long como tipo primitivo, use Long, que é um objeto…

dai fica:

private Long nome_do_campo;

resolveu?

J

Não Amigão !

LONG ORACLE = texto =! LONG em Java

M

Usa um Array de bytes:

@Column
@Lob
private byte[] fieldName;

Não lembro se o @Lob é realmente necessário

R

Pode tentar assim:

@Column(name = "FILED_NAME", columnDefinition = "Long") private byte[] fieldName;

H

romarcio:
Pode tentar assim:

@Column(name = "FILED_NAME", columnDefinition = "Long") private byte[] fieldName;

Mas desse modo você prende a aplicação ao Schema de banco de dados? Do modo como o marciorodr0 colocou não deixaria a aplicação mais portável?

R

Com certeza dessa forma vai perder a portabilidade entre bancos diferentes.

Mas se for criar esse campo no banco pelo framework, dai para ter o tipo específico da coluna que você quer, precisa informa-lo na anotação Column.

Por exemplo, no MySQL temos 4 tipos de blob > TinyBlob, MediumBlob, Blob e LongBlob

Cada tipo armazena um dado com um tamanho (MB) diferente.

Se você usar apenas a anotação @Lob o framework vai escolher um tipo qualquer, acho que o Hibernate escolhe o Blob, mas se você precisa do LongBlob, ou precisa de um tamanho menor como o MediumBlob, teria que definir isso na anotação @Column.

H

romarcio:
Com certeza dessa forma vai perder a portabilidade entre bancos diferentes.

Mas se for criar esse campo no banco pelo framework, dai para ter o tipo específico da coluna que você quer, precisa informa-lo na anotação Column.

Por exemplo, no MySQL temos 4 tipos de blob > TinyBlob, MediumBlob, Blob e LongBlob

Cada tipo armazena um dado com um tamanho (MB) diferente.

Se você usar apenas a anotação @Lob o framework vai escolher um tipo qualquer, acho que o Hibernate escolhe o Blob, mas se você precisa do LongBlob, ou precisa de um tamanho menor como o MediumBlob, teria que definir isso na anotação @Column.

Legal. Valeu! =D

V

jakefrog:
romarcio:
Pode tentar assim:

@Column(name = "FILED_NAME", columnDefinition = "Long") private byte[] fieldName;

Mas desse modo você prende a aplicação ao Schema de banco de dados? Do modo como o marciorodr0 colocou não deixaria a aplicação mais portável?

Lá na empresa, tivemos uma série de problemas com o tipo LONG e a única solução foi usar JDBC puro para buscar os dados desse campo, já que outra aplicação (de terceiros) usa esse campo.
Se você puder substituir o campo LONG por CLOB (e LONG RAW por BLOB), é melhor, até porque a Oracle desaconselha o uso de LONG/LONG RAW desde 1997, com o lançamento do Oracle 8i.

Abraços.

J

O DBA me falou que o banco tem 20 anos…

Por isso ese LONG dos infernos…

Obrigado a todos !

Abraço.

Criado 3 de julho de 2012
Ultima resposta 8 de jul. de 2012
Respostas 9
Participantes 6