[RESOLVIDO] Id da Entidade

7 respostas
ddark.emanu

Seria possível criar uma entidade com ID do tipo String ? utilizando EJB3, JPA e Hibernate

7 Respostas

renanreismartins

Sim, basta anotar o campo com a anotação @Id

abrassss

ddark.emanu

Funcionará normalmente ? Quando uso ID como String , retorna um erro que o Provider está esperando um atributo do tipo LONG é alguma configuração no mapeamento ?

Valeu

renanreismartins

posta a classe e o erro

ddark.emanu

Entidade Pessoa:

@Entity
@Table(name="PESSOAS")
@Inheritance(strategy = TABLE_PER_CLASS)
@MappedSuperclass
public class Pessoa implements Serializable {

	private static final long serialVersionUID = 5743696681667477943L;
	
	private String codigo;
	private String nome;
	private String cnpjCpf;
	private String ddd;
	private String telefones;
	private String email;
	private String endereco;	
	private TipoPessoa tipoPessoa;
	
	@Id
	public String getCodigo() {
		return codigo;
	}
        ...

Entidade Usuário

@Entity
@Table(name = "USUARIO")
public class Usuario implements Serializable {
     
     private Long codigo;
     private Pessoa pessoa;

ERRO :

Caused by: javax.ejb.EJBException: org.hibernate.TypeMismatchException: Provided id of the wrong type for class br.com.sistema.model.legado.Pessoa. Expected: class java.lang.String, got class java.lang.Long
	at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:77)
	at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)
	at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:190)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.tx.NullInterceptor.invoke(NullInterceptor.java:42)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.ejb3.stateless.StatelessContainer.dynamicInvoke(StatelessContainer.java:421)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invokeLocal(IsLocalInterceptor.java:85)
	at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
	at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102)
	at org.jboss.aspects.remoting.PojiProxy.invoke(PojiProxy.java:62)
renanreismartins

amigo sua classe Pessoa tem o atributo codigo como String e a classe Usuario tem o atributo codigo como Long.

Ja vi esse erro quando o programador tenta buscar uma entidade passando o tipo errado da chave primaria. verifique isso tb

e poste o stacktrace inteiro para facilitar

abrasssss

ddark.emanu

Valeu galera , já consegui resolver o problema, que era o seguinte :
eu tenho um método buscar por ID , que recebia o código da pessoa e eu estava passando um LONG , o qual estava esperando uma STRING

valeu

renanreismartins

exatamente isso…

abrassss

Criado 12 de abril de 2011
Ultima resposta 13 de abr. de 2011
Respostas 7
Participantes 2