2016-11-19 5 views
1

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?

Antwort

1

Wenn Sie benannte Abfrage verwenden möchten, dann sollten Sie es als verwenden:

@NamedQuery(name = "obtenerAreaPorId", query = "SELECT a FROM AreaFuncional a where a.id= :id") }) 

und

getSessionFactory().getNamedQuery("obtenerAreaPorId").setLong("id", id) 
+0

Ich denke, die beiden posibilities ok sind. Ich habe viele andere benannte Abfragen in der gleichen Weise gemacht –

0

Ich glaube, Sie nicht die ID-Parameter übergeben können; -Test dieses:

@NamedQuery(name = "obtenerAreaPorId", query = "SELECT a FROM AreaFuncional a where a.id=:id") }) 

getSessionFactory().getNamedQuery("obtenerAreaPorId").setParameter("id",myId) 
Verwandte Themen