Vamos lá pessoal, dei uma procurada aqui e no Google e nada que me ajudasse.
A minha estrutura é a seguinte: Hibernate, Java e Firebird
A conexão de banco eu utilizei generics para usar a mesma para todas as classes… não uso persistence.xml e adiciono tudo em tempo de execução. Com execeção desta classe que tem campos dos tipo char no banco, as outras funcionam perfeitamente.
ele esta porocurando um propriedade q não existe no seu codigo, e por isso não consegue atulizar seu valor por reflexao, provavelemnte vc esta utilizando um membro que não é @Embedable e não ta colocando nenhum mapeamento especial pra ele, o hiberante acaba q n encontra o lugar correto de mapear… mostra a tua classe completa, q fica + facil de ajudar
E
edmafer
Ok, ai está.
Não consegui encontrar esta propriedade que ele está procurando… onde será que estou errando?
Há sim, gerei as entidades pelo netbeans
/** * * @author Edson Marco Ferrari Junior */@Entity@Table(name="ENDERECO")@SequenceGenerator(name="GENIDENDERECO",sequenceName="GENIDENDERECO")publicclassEnderecoimplementsSerializable,AccessingDatabase{privatestaticfinallongserialVersionUID=1L;@Id@Basic(optional=false)@Column(name="IDENDERECO")@GeneratedValue(strategy=GenerationType.AUTO,generator="GENIDENDERECO")privateIntegeridendereco;@Column(name="LOGRADOURO")privateStringlogradouro;@Column(name="NUMERO")privateStringnumero;@Column(name="COMPLEMENTO")privateStringcomplemento;@Column(name="BAIRRO")privateStringbairro;@Column(name="CIDADE")privateStringcidade;@Column(name="ESTADO")@Type(type="character")privateStringestado;@Column(name="CEP")@Type(type="character")privateStringcep;@Column(name="CAIXAPOSTAL")privateStringcaixapostal;@Column(name="IDORIGINAL")privateIntegeridoriginal;@Column(name="TABLENAME")privateStringtablename;publicEndereco(){}publicEndereco(Integeridendereco){this.idendereco=idendereco;}publicIntegergetIdendereco(){returnidendereco;}publicvoidsetIdendereco(Integeridendereco){this.idendereco=idendereco;}publicStringgetLogradouro(){returnlogradouro;}publicvoidsetLogradouro(Stringlogradouro){this.logradouro=logradouro;}publicStringgetNumero(){returnnumero;}publicvoidsetNumero(Stringnumero){this.numero=numero;}publicStringgetComplemento(){returncomplemento;}publicvoidsetComplemento(Stringcomplemento){this.complemento=complemento;}publicStringgetBairro(){returnbairro;}publicvoidsetBairro(Stringbairro){this.bairro=bairro;}publicStringgetCidade(){returncidade;}publicvoidsetCidade(Stringcidade){this.cidade=cidade;}publicStringgetEstado(){returnestado;}publicvoidsetEstado(Stringestado){this.estado=estado;}publicStringgetCep(){returncep;}publicvoidsetCep(Stringcep){this.cep=cep;}publicStringgetCaixapostal(){returncaixapostal;}publicvoidsetCaixapostal(Stringcaixapostal){this.caixapostal=caixapostal;}publicIntegergetIdoriginal(){returnidoriginal;}publicvoidsetIdoriginal(Integeridoriginal){this.idoriginal=idoriginal;}publicStringgetTablename(){returntablename;}publicvoidsetTablename(Stringtablename){this.tablename=tablename;}@OverridepublicinthashCode(){inthash=0;hash+=(idendereco!=null?idendereco.hashCode():0);returnhash;}@Overridepublicbooleanequals(Objectobject){// TODO: Warning - this method won't work in the case the id fields are not setif(!(objectinstanceofEndereco)){returnfalse;}Enderecoother=(Endereco)object;if((this.idendereco==null&&other.idendereco!=null)||(this.idendereco!=null&&!this.idendereco.equals(other.idendereco))){returnfalse;}returntrue;}@OverridepublicStringtoString(){return"br.com.theos.client.database.entities.Endereco[idendereco="+idendereco+"]";}@OverridepublicIntegergetId(){returngetIdendereco();}}
força esses 2 para que eles sejam vistos como array de char.... enfim... deve ser isso... ou vc remove esse @Type... ou vc muda o tipo de String para char[]
E
edmafer
Eu havia visto esta página… mas não tenho campos cep nulos (Pelo menos não nos registros a serem carregados) e os campos que tenho nulos não entendi o problema deles…
Nas outras entidades eu tenho campos nulos, mas não tenho este problema.
E
edmafer
Lavieri:
pelo post do thingol e pelo seu post com seu código, é certo que esse @Type ai q ta dando o galho todo...
provavelmente o hibernate esta tentando enfiar um tipo char[] no seu tipo String ... e isso ta dando um erro...
força esses 2 para que eles sejam vistos como array de char.... enfim... deve ser isso... ou vc remove esse @Type... ou vc muda o tipo de String para char[]
Pois é... mas acontece que o campo no banco é do tipo char... e se eu não colocar o type ele dá o sequinte erro:
Wrong column type: CEP, expected: varchar(255)
L
Lavieri
edmafer:
Eu havia visto esta página… mas não tenho campos cep nulos (Pelo menos não nos registros a serem carregados) e os campos que tenho nulos não entendi o problema deles…
Nas outras entidades eu tenho campos nulos, mas não tenho este problema. :|
o que vc pode tirar como lição desse post q o thingol colocou, é que quando os tipos são incopativeis da esse problema… por exemplo…
um boolean não aceita “null” … pq boolean é primitvo e null so entra em um Object…
o mesmo pode estar acontecendo com vc… seu camo é um String, e o hibernate ta tentando enfiar um array de chars nele… ta dando o mesmo problemas… tipos incompativeis
L
Lavieri
edmafer:
Lavieri:
pelo post do thingol e pelo seu post com seu código, é certo que esse @Type ai q ta dando o galho todo...
provavelmente o hibernate esta tentando enfiar um tipo char[] no seu tipo String ... e isso ta dando um erro...
força esses 2 para que eles sejam vistos como array de char.... enfim... deve ser isso... ou vc remove esse @Type... ou vc muda o tipo de String para char[]
Pois é... mas acontece que o campo no banco é do tipo char... e se eu não colocar o type ele dá o sequinte erro:
Wrong column type: CEP, expected: varchar(255)
mais ai é a vida... o fato é q vc não pode enfiar uma array de char[] em uma String =P ... a não ser, q vc faça um atribute override do valor q é um char[] q ta dentro da String... mas seria algo q n fiz, tem q olhar pra ver como fazer... e pode te dar problemas, pq naum é bom setar Strings por reflexao, basta uma ir pro poll de strings e uma mexida na array de char pra avacalhar todo seu programa
E
edmafer
Lição aprendida, e tenho certeza que será muito útil.
Mas infelizmente não resolveu este problema…
alterei para char[]
@Column(name="CEP")privatechar[]cep;
E também nos getters and setters…
Mas ai ele retornou:
Teimei e coloquei o @Type de volta…
E voltamos a mensagem de erro anterior:
Há sim… para garantir ranquei todos o ceps nulos e transformei-os em vazios.
L
Lavieri
essa anotação @Type é do proprio hibernate ne ?? não é do JPA ??
é meio estrenho… isso… quando usei firbird mapiei sem problemas meus campos varchar o.O
c tiver ta no notebook do meu cunhado… e ele mora no interiro da paraíba… heheh O.o complicado…
mas o fato é
@Type(type=“character”) requer um campo do tipo “char” … e por isso ta dando pau… mas pelo q vc esta dizendo q vc tem é um tipo parecido com “varchar” … n lembro bem do firebid n foi feito por mim o banco, era um banco antigo de outra pessoa … eu so fiz mapear e colocar pra roda em java… nem lembro exatamente c o campo era CHAR(9) ou VARCHAR … enfim…
O duro que mudar no banco não é uma opção… juro que já pensei nisto
L
Lavieri
é complicado, tem q procurar por pessoas que resolveram esse problema… pra isso o melhor é procurar por Firebird, Hibernate e Field Char … deve ter alguma coisa por ai… tem esse exmplo ai com xml… mas enfim… não sei como vc vai solucionar seu problema, mas a verdade é que o Hibernate olha para o tipo “char” e ignora o que esta entre parenteses… para ele “char(9)” é um tipo char tb… e ele não enxerga como varchar…
T_T… não sei como resolver seu problema… vc vai ter q procurar uma forma do hibernate mapear direito esse seu campo
E
edmafer
então… estou na pesquisa desde ontem.
Postei no fórum do hibernate.org e em uma lista java que participo.
Mas eu agradeço mesmo a ajuda que tu me deu.
Vamos continuar a pesquisa e tentar resolver isto o quanto antes… o patrão já está no meu pé :S
Assim que eu encontrar alguma coisa corro aqui e deixo a solução para outros que possam ter este problema.
L
Lavieri
quem manda usar firebird =x
hihihihi …
E
edmafer
Lavieri:
quem manda usar firebird =x
hihihihi …
HAHAHAHA!!!
Tu acha que o problema pode ser por ser o firebird? E para ajudar ainda é uma versão antiga 1.5.3
L
Lavieri
edmafer:
Lavieri:
quem manda usar firebird =x
hihihihi …
HAHAHAHA!!!
Tu acha que o problema pode ser por ser o firebird? E para ajudar ainda é uma versão antiga 1.5.3 :(
não estou falando q pode ser… estou dizendo q é… heheh… metade dele, e outra metade do hibernate… por não enxergar o campo direito…
agora me surgio uma duvida… qual o Dialect q vc esta usando ?? na sua configuração ?? pq o problema é justamente pq o Dialect q o hibernate ta usando não sabe identificar um camo char(X) como um vamo VARCHAR(X) … enfim… posta ai tua conf do hibernate… mais especificamente o Dialect q vc ta usando… c tiver usando HQLDialect ou algo assim esse pode ser o problema… o Firebird tem um Dialect dele… e vc tem q usar este
E
edmafer
Eu ia ficar super feliz se estivesse errado… mas eu estou usando o dialect do firebird
Vamos continuar a pesquisa e tentar resolver isto o quanto antes… o patrão já está no meu pé :S
ahh e avisa pro seu patrão q eu to procurando emprego ahuahuhua… diz pra ele me mandar o curriculo dele, q ai eu analiso pra ver c quero trabalhar ai =x uhahuauha…
mas é serio q to procurando =x
L
Lavieri
edmafer:
Eu ia ficar super feliz se estivesse errado… mas eu estou usando o dialect do firebird
haha hibernate é codigo aberto =x… olha o FirebirdDialect… e modifica pra aceitar “char” … e por favor, não me pergunte como fazer isso =x
Ps.: essa senha do Firebird tem uma segurança q sempre me impressiona sysdba -> masterkey
EDIT.: apenas como teste… Try Remove this shit ==>> setProperty(“hibernate.hbm2ddl.auto”, “validate”);
e então bota o tipo do campo pra String… e ve c funfa =x
E
edmafer
HAHAHAHA!!!
Tá certo que eu gosto de alterar algumas coisas… mas não. Deixa do jeito que está
A senha não é esta não… ta ai só preencher o espaço e não publicar a correta
L
Lavieri
edmafer:
HAHAHAHA!!!
Tá certo que eu gosto de alterar algumas coisas… mas não. Deixa do jeito que está
A senha não é esta não… ta ai só preencher o espaço e não publicar a correta :)
mas é isso q to falando… não importa q senha vc coloca… a senha mesmo é no servidor e não no banco de dados… portanto é so copiar o banco pra outra makina, com Firebird padrão q o banco abre com a senha basica… ou mesmo qualquer programa de Embeded abre tb o banco, com a senha padrão… é triste…
mas outra coisa é… existe 2 JDBC… tenta com o outro…
org.firebirdsql.jdbc.FirebirdDriver e org.firebirdsql.jdbc.FBDriver
tenta usar o 1°
ahh e não eskece do que editei la em cima
EDIT.: apenas como teste… Try Remove this shit ==>> setProperty(“hibernate.hbm2ddl.auto”, “validate”);
e então bota o tipo do campo pra String… e ve c funfa =x
tenta isso tb
E
edmafer
[size=18]RESOLVIDO[/size]
O type não servia para nada (além de dar problema :D) o que faltava éra informar o tipo do campo na propriedate @Column.
@Column(name="ESTADO",columnDefinition="char(2)")
Lavieri muito obrigado! Vamos dar continuidade ao projeto!
Eu estava preocupado achando que podia ser a minha forma de configuração do hibernate e mapeamento das classes sem xml (Eca!) :XD: . Mas fico muito feliz que tenha funcionado!
Quanto a senha, tu tem razão, mas utilizamos as permissões para mesmo alterando o servidor o usuário sysdba não tem permissão para acessar nada
E referente ao emprego se eu souber de alguma vaga… Mas estamos longe pra caramba! Estou no interior do Paraná! Maringá. Se vier para estes lados vamos tomar aquela gelada!
L
Lavieri
edmafer:
[size=18]RESOLVIDO[/size]
O type não servia para nada (além de dar problema :D) o que faltava éra informar o tipo do campo na propriedate @Column.
@Column(name="ESTADO",columnDefinition="char(2)")
Lavieri muito obrigado! Vamos dar continuidade ao projeto!
Quanto a senha, tu tem razão, mas utilizamos as permissões para mesmo alterando o servidor o usuário sysdba não tem permissão para acessar nada
E referente ao emprego se eu souber de alguma vaga… Mas estamos longe pra caramba! Estou no interior do Paraná! Maringá. Se vier para estes lados vamos tomar aquela gelada!
Unica coisa gelada q vc pode tomar é LEITE! … to vendo sua foto ai em cima do computador, estou ate impressionado que vc ja saiba digitar e fazer alguns código hehehe… mas eu bebo a cerveja enquanto vc fica no seu leite… foda é ter q comprar uma cadeirinha pra gente poder siar junto ahuuaa
sempre é melhor resolver os problemas com JPA em vez de anotações do proprio hibernate, assim funciona pra qualquer linguagem … heheh é rapaz… mil arrodeios e o problema resolvia com columnDefinition, eu quase nunca uso essa anotação, isso é pra quem usa DBs reliquias! como firebird auahuahu