org.hibernate.QueryException:无法解析属性:Hermanos of:com

时间:2014-08-28 18:20:06

标签: hibernate

有人知道我为什么会收到此错误:

org.hibernate.QueryException: could not resolve property: Hermanos of: com.sahe.model.SalidasProcesionales [FROM com.sahe.model.SalidasProcesionales u LEFT JOIN FETCH u.Hermanos LEFT JOIN FETCH u.PTipoTramo LEFT JOIN FETCH u.Insignias]

当我称这种方法时:

@Override
public List<SalidasProcesionales> findAll() {
    List<SalidasProcesionales> listadoSalidasProcesionales = null;
    Session sesion = HibernateUtil.getSessionFactory().getCurrentSession();
    String hql = "FROM SalidasProcesionales u LEFT JOIN FETCH u.Hermanos LEFT JOIN FETCH u.PTipoTramo LEFT JOIN FETCH u.Insignias";
    try {
        sesion.getTransaction().begin();
        listadoSalidasProcesionales = sesion.createQuery(hql).list();
        sesion.getTransaction().commit();
    } catch (Exception e) {
        sesion.getTransaction().rollback();
        e.printStackTrace();
    }
    return listadoSalidasProcesionales;
}

通过

this.salidasProcesionales = new ArrayList<SalidasProcesionales>();

感谢。

实体是:

  

@Entity       @Table(name =“salidas_procesionales”,catalog =“sahe”)       公共类SalidasProcesionales实现了java.io.Serializable {

/**
 * 
 */
private static final long serialVersionUID = 1L;
private Integer codigo;
private Insignias insignias;
private Hermanos hermanos;
private PTipoTramo PTipoTramo;
private int anyo;

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "codigo", unique = true, nullable = false)
public Integer getCodigo() {
    return this.codigo;
}

public void setCodigo(Integer codigo) {
    this.codigo = codigo;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "insignia", nullable = false)
public Insignias getInsignias() {
    return this.insignias;
}

public void setInsignias(Insignias insignias) {
    this.insignias = insignias;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "codigoHermano", nullable = false)
public Hermanos getHermanos() {
    return this.hermanos;
}

public void setHermanos(Hermanos hermanos) {
    this.hermanos = hermanos;
}

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "tipoTramo", nullable = false)
public PTipoTramo getPTipoTramo() {
    return this.PTipoTramo;
}

public void setPTipoTramo(PTipoTramo PTipoTramo) {
    this.PTipoTramo = PTipoTramo;
}

@Column(name = "anyo", nullable = false)
public int getAnyo() {
    return this.anyo;
}

public void setAnyo(int anyo) {
    this.anyo = anyo;
}
}

我删除了构造函数的长度。

1 个答案:

答案 0 :(得分:1)

当您在JPQLHQL中撰写联接时,您需要使用属性,而不是权限,因此您需要:

"FROM SalidasProcesionales u" + 
" LEFT JOIN FETCH u.hermanos" +   // because the property is Hermanos hermanos;
" LEFT JOIN FETCH u.PTipoTramo" + // because the property is PTipoTramo PTipoTramo;
" LEFT JOIN FETCH u.insignias";   // because the property is Insignias insignias;

如果您只使用选择查询,也不需要交易。