2016-11-19 4 views
1

私は春と休止状態のVaadin Javaプロジェクトで作業しています。私は私のプロジェクトの次のエンティティを持っている:Hibernateは正しいデータベースクエリを作成しますがヌルエンティティを返します

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; 

} 

私は、クエリを実行すると、私はデータベースの正しいmysqlのクエリを取得:

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=? 

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>(); 
    } 
.... 

は、その後、私は次のクエリを持っています

コンソールでmysql文を実行すると正解が返されますが、Hibernateはnullオブジェクトを返します。

エラーは発生しません。 誰もがこれを手伝うことができますか?

答えて

1

あなたがして名前付きクエリを使用する場合は、としてそれを使用する必要があります。

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

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

私は2つの可能性はあります。同じように多くの名前付きクエリが実行されています –

0

私はあなたがidパラメータを渡すことはできませんと思います。 これをテストしてください:

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

getSessionFactory().getNamedQuery("obtenerAreaPorId").setParameter("id",myId) 
関連する問題