有人知道我为什么会收到此错误:
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;
}
}
我删除了构造函数的长度。
答案 0 :(得分:1)
当您在JPQL
或HQL
中撰写联接时,您需要使用属性,而不是权限,因此您需要:
"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;
如果您只使用选择查询,也不需要交易。