Seria possível criar uma entidade com ID do tipo String ? utilizando EJB3, JPA e Hibernate
[RESOLVIDO] Id da Entidade
7 Respostas
Sim, basta anotar o campo com a anotação @Id
abrassss
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
posta a classe e o erro
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)
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
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
exatamente isso…
abrassss