Declaración del usuario:

@Entity
public class User {
    @Id
    @GeneratedValue
    private Integer id;
    ....

Patrón de declaración:

@Entity
public class Pattern {
    @Id
    @GeneratedValue
    Integer id;
    ...

UserPatternDeclaration:

public class UserPattern {
    @Id
    @GeneratedValue
    Integer id;

    @ManyToOne
    @JoinColumn(name = "user_id")
    User user;

    @ManyToOne
    @JoinColumn(name = "pattern_id")
    Pattern pattern;
    ...

petición a la base de datos:

Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from UserPattern where user = :user_id and pattern = :pattern_id ");
query.setParameter("user_id", userId);
query.setParameter("pattern_id", pattern_id);
List<UserPattern> list = query.list();//exception throws here

Tengo excepción siguiente:

 ...
    java.lang.IllegalArgumentException: Can not set java.lang.Integer field 
    com.....s.model.User.id to java.lang.Integer
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
        at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)
        at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:55)
        at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
        at java.lang.reflect.Field.get(Field.java:379)
    ....

Por favor ayuda para solucionar este problema.

mensaje de error parece muy muy extraño.

He leído tema relacionado haga clic en pero yo no encontró respuesta.

P. S.

de hibernación de registro(antes de excepción):

Hibernate: 
    select
        userpatter0_.id as id1_2_,
        userpatter0_.amountSearched as amountSe2_2_,
        userpatter0_.amountplayed as amountpl3_2_,
        userpatter0_.pattern_id as pattern_4_2_,
        userpatter0_.user_id as user_id5_2_ 
    from
        UserPattern userpatter0_ 
    where
        userpatter0_.user_id=? 
        and userpatter0_.pattern_id=?

En el navegador me vea el siguiente mensaje:

HTTP Status 500....could not get a field value by reflection getter of...model.User.id
¿Tienes getters y setters para que el campo id?
Sí, he getters y setters para todos los campos
¿Qué pasa con la diferencia en «patern_id» y «pattern_id»?
fijo, volver a crear tablas de base de datos(drope y, a continuación, crear), pero veo vieja resultado
¿Qué tipo de base de datos está utilizando? Se puede recuperar un conjunto de resultados vacío sin problemas usando el código? Se puede recuperar un objeto de Usuario haciendo un from user where id = ? consulta?

OriginalEl autor gstackoverflow | 2014-07-11

4 Comentarios

  1. 15

    ¿Qué sucede si cambia su consulta HQL para from UserPattern where user.id = :user_id and pattern.id = :pattern_id?

    Creo Hibernate es confuso objetos y campos de ID.

    Es bastante extraño porque sé que HQL utiliza el nombre de la clase en lugar de el nombre de la tabla y los nombres de propiedad en lugar de un nombre de columna. UserPattern no ha de usuario.id de la propiedad.
    No, pero la idea es esta: Si todo era público… ¿qué haría usted necesita llamar para obtener el id del usuario? UserPattern.usuario.id! Así que por eso es el usuario.id.

    OriginalEl autor Pimgd

  2. 4

    Necesita modificar su consulta como sigue:

    from UserPattern where user.id = :user_id and pattern.id = :pattern_id

    En su consulta, usted está tratando de coincidir con un User objeto con un Integer objeto.

    Es bastante extraño porque sé que HQL utiliza el nombre de la clase en lugar de el nombre de la tabla y los nombres de propiedad en lugar de un nombre de columna. UserPattern no ha de usuario.id de la propiedad.

    OriginalEl autor Priyesh

  3. 1

    Si el nombre del campo es «id», sus métodos getter y setter debe ser nombrado

    public Integer getId(){return id;}
    public void setId(Integer id){this.id = id};

    Si está utilizando Eclipse, generar los getter/setter por click derecho -> Fuente -> Generar Getters y Setters…

    Asegúrese de que sus métodos getter y setter son públicos. También se debe añadir @Tabla-Anotación a todas sus Entidades

    Yo sólo uso la Entidad y se trabaja así
    Oh. Es cierto. @Tabla de anotación permite especificar el nombre de la tabla y algunos otros detalles. docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/…

    OriginalEl autor dieter

  4. 0

    creo que tal vez su anotación debe

    @ManyToOne(TargetEntity=….class)

    OriginalEl autor T4Technologic

Dejar respuesta

Please enter your comment!
Please enter your name here