2012-02-27 33 views
5

Mientras trabajaba en mi primera aplicación en Hibernate. Al intentar recuperar un objeto de usuario de la BD que estoy recibiendo la siguiente excepción:TypeMismatchException El ID proporcionado es de un tipo incorrecto

org.hibernate.TypeMismatchException: Identificación del tipo incorrecto Previsto org.cw.form.User clase. Esperado: clase java.lang.Integer, obtuvo la clase java.lang.String en org.hibernate.event.def.DefaultLoadEventListener.onLoad (DefaultLoadEventListener.java:109) en org.hibernate.impl.SessionImpl.fireLoad (SessionImpl) .java: 906) en org.hibernate.impl.SessionImpl.load (SessionImpl.java:823) en org.hibernate.impl.SessionImpl.load (SessionImpl.java:816)

he creado la tabla USERS con el siguiente postgreSQL:

CREAR SECUENCIA user2_id_seq; CREAR USUARIOS DE TABLA (número entero de identificación NO NULL DEFAULT próximoval ('user2_id_seq'), nombre_usuario varchar (45) NOT NULL UNIQUE, contraseña varchar (45) NOT NULL, correo electrónico varchar (45) NOT NULL, PRIMARY KEY (id)) ;

y la entidad del usuario se define como tal:

@Entity @Table (name = "Usuarios") public class User {

@Id 
@Column(name="ID") 
@GeneratedValue(strategy= GenerationType.IDENTITY) 
private Integer id; 

@Column(name="USER_NAME", unique = true) 
private String userName; 

@Column(name="PASSWORD") 
private String password; 

@Column(name="EMAIL") 
private String email; .. all the getters and setters... 

que me estoy perdiendo algo ?

Respuesta

5

Sería más fácil responder si se muestra cómo se recuperan los usuarios. En base al mensaje:

Provided id of the wrong type for class org.cw.form.User. 
Expected: class java.lang.Integer, got class java.lang.String 

supongo que está proporcionando cadena en lugar de tipo correcto (entero):

String userID = "1"; //Should be Integer userID = 1 instead 
session.get(User.class, userID); 
+0

Oye funcionó. Gracias. – special0ne

2

Realmente no sé si va a resolver su problema, pero dado que está utilizando secuencias para generar los identificadores en el lado db, creo que se debe utilizar un generador de secuencia:

@Id 
@Column(name="ID") 
@GeneratedValue(strategy= GenerationType.SEQUENCE, generator="user2_id_seq") 
private Integer id; 

Por favor, vea esta publicación para obtener más información: Hibernate sequence on oracle, @GeneratedValue(strategy = GenerationType.AUTO)

2
public User findClientByUsername(String login) {   
     Criteria criteria = sessionFactory.getCurrentSession().createCriteria(User.class); 
     criteria.add(Restrictions.like("userName", login)); 
     return (User) criteria.uniqueResult(); 
    } 

solución de su problema.

1

Tuve un culpable diferente al crear este problema: había copiado y pegado el repositorio de otra entidad que utilizaba una cadena como tipo de clave primaria.

así que tuve

class MyEntity implements Serializable { 

    @Id 
    Integer id 

en combinación con

interface MyEntityRepository extends CrudRepository<MyEntity, String> { 

que produjo el mensaje de error.

Simplemente cambiando el tipo de interfaz de Cadena a Entero resolvió el problema para mí.

Cuestiones relacionadas