2011-06-17 14 views
11

Estoy usando QueryDSL con Spring Data JPA en mi proyecto Java y tengo archivos generados usando QueryDSL maven plugin para usar las clases QueryDSL Model generadas por él. Esto funciona muy bien cuando lo uso para objetos anidados de un nivel, sin embargo, si trato de acceder a los objetos de acceso de segundo nivel, me da una excepción NullPointerException, ya que el objeto de modelo de segundo nivel no se inicializa.QueryDSL Clases generadas que no pueden acceder a elementos de segundo nivel para consultar

Agradecería un poco de ayuda.

Recibo una NullPointerException en la 3ª línea qmachine.vendor es nula.

QTransaction qtransaction = QTransaction.transaction; 
QMachine qmachine = qtransaction.machine; 
BooleanExpression vendorexp = qmachine.vendor.vendor.eq(machineType); 

Mis clases de mapeo son a continuación: Transacción

@Entity 
@Table(name = "dsdsd") 
public class Transaction extends AbstractPersistable<Long> { 

    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    @JoinColumn(name = "machine_id") 
    private Machine machine; 

} 

Y la clase de máquina es:

@Entity 
@Table(name="machine") 
public class Machine extends AbstractPersistable<Long> { 

    private static final long serialVersionUID = 1L; 

    @ManyToOne 
    @JoinColumn(name="vendor_id") 
    private Vendor vendor; 
} 

y la clase de proveedor es

@Entity 
@Table(name="vendors") 
public class Vendor extends AbstractPersistable<Long> { 

    private static final long serialVersionUID = 1L; 

    @Column(name="vendor") 
    @Enumerated(EnumType.STRING) 
    private VendorType vendor; 

} 

tengo ommit ted los getters y setters intencionalmente.

+1

¿Puedes publicar stacktrace? – abalogh

+0

Agregó el código. La stacktrace era solo una NullPointerException en qmachine.vendor.vendor – Abhishek

Respuesta

13

Por defecto, solo se inicializa el primer nivel. Consulte esta sección de documentación para conocer las opciones de inicialización: http://www.querydsl.com/static/querydsl/3.6.0/reference/html/ch03s03.html#d0e2192

La inicialización completa no es posible con los campos finales, debido a la posibilidad de bucles infinitos, pero Querydsl también ofrece la opción de métodos de acceso a la propiedad.

Cuestiones relacionadas