Ich arbeite in einem Vaadin Java-Projekt mit Frühling und Winterschlaf. Ich habe die nächste Entität in meinem Projekt:Hibernate machen richtige Datenbankabfrage, aber null Entity
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import org.hibernate.annotations.NamedQueries;
import org.hibernate.annotations.NamedQuery;
@Entity
@NamedQueries({
@NamedQuery(name = "listarAreas", query = "SELECT a FROM AreaFuncional a"),
@NamedQuery(name = "obtenerAreaPorId", query = "SELECT a FROM AreaFuncional a where a.id=?") })
public class AreaFuncional implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
private String nombre;
@ManyToOne(cascade = { CascadeType.ALL })
@JoinColumn(name = "area_pertenencia_id")
private AreaFuncional areaPertenencia;
@OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Set<AreaFuncional> subAreas;
@OneToMany(fetch = FetchType.LAZY)
private Set<Empleado> empleados;
private String telefonos;
private String email;
public AreaFuncional() {
this.subAreas = new HashSet<AreaFuncional>();
this.empleados = new HashSet<Empleado>();
}
....
Dann habe ich die nächste Abfrage:
public AreaFuncional obtenerAreaPorId(Long id) {
AreaFuncional area = (AreaFuncional)
getSessionFactory().getNamedQuery("obtenerAreaPorId").setLong(0, id)
.uniqueResult();
if (area == null)
throw new RuntimeException("No existe el area con id " + id);
return area;
}
Wenn ich die Abfrage ausführen, bekomme ich die richtige mysql Abfrage für Datenbank:
01:49:11,785 DEBUG http-bio-8080-exec-42 hibernate.SQL:109 - select areafuncio0_.id as id1_0_, areafuncio0_.area_pertenencia_id as area_per5_0_, areafuncio0_.email as email2_0_, areafuncio0_.nombre as nombre3_0_, areafuncio0_.telefonos as telefono4_0_ from AreaFuncional areafuncio0_ where areafuncio0_.id=?
Wenn ich die mysql-Anweisung in der Konsole ausführen, bekomme ich die richtige Antwort, aber Hibernate gibt Null-Objekt zurück.
Ich kann den Fehler nicht erhalten. Kann mir jemand dabei helfen?
Ich denke, die beiden posibilities ok sind. Ich habe viele andere benannte Abfragen in der gleichen Weise gemacht –