Hibernate在用@ManyToOne查询时返回null hql [英] Hibernate returns null hql in query with @ManyToOne

查看:767
本文介绍了Hibernate在用@ManyToOne查询时返回null hql的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

首先,我很抱歉如果我的问题看起来有些业余,但我对hibernate / jpa和mysql的知识有限。

那么,我有以下实体:



用户实体

  @Entity 
@Table(name =user)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = id_user)
private long idUser;

@Column(nullable = false)
私有字符串名称;

@Column(nullable = false)
private String email;

@ManyToOne(可选= true,fetch = FetchType.EAGER)
@JoinColumn(name =level,referencedColumnName =id_level,nullable = true)
private水平;

@Transient
私人长汇票;
}

从那里开始,我正在尝试执行以下mysql查询: p>

  public User findUserByEmail(String email){
Session session = HibernateUtil.getSessionFactory()。openSession();
User user = null;

String hql =SELECT
+u.idUser as idUser,
+u.nome as nome,
+u.level as级别,
+(SELECT count(*)FROM UserLikes likes WHERE likes.user = u.idUser)as totalLikes
+FROM User u WHERE u.email =:email;
尝试{
Query query = session.createQuery(hql);
query.setString(email,email);
query.setResultTransformer(Transformers.aliasToBean(User.class));
user =(Usuario)query.uniqueResult();

} catch(RuntimeException ex){
throw ex;
} finally {
session.close();
}

返回用户;





$ b上面的代码正常返回用户,但是当用户搜索时返回null在数据库中没有设置字段级别的值。也就是说,如果我没有错,hibernate会执行内部连接用户/级别,而不是左连接,从而使返回值为null。



有没有人知道如何获取在这附近?

解决方案

我认为你需要使用这个。

  @ManyToOne //简单
@JoinColumn(nullable = true)简单

并在您的查询中使用简单的方式。

  FROM用户u WHERE u.email =:电子邮件

我在类似的项目中使用它并工作。

干得好。

First I apologize if my question seems a bit amateurish, but my knowledge with hibernate / jpa and mysql are somewhat limited.

Well, I have the following entity:

User Entity

@Entity
@Table(name = "user")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_user")
    private Long idUser;

    @Column(nullable = false)
    private String name;

    @Column(nullable = false)
    private String email;

    @ManyToOne(optional = true, fetch = FetchType.EAGER)
    @JoinColumn(name = "level", referencedColumnName = "id_level", nullable = true)
    private Level level;

    @Transient
    private Long totalLikes;
}

From there, I'm trying to do the following mysql query:

public User findUserByEmail(String email) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        User user = null;

        String hql = "SELECT "
                   + "u.idUser as idUser, "
                   + "u.nome as nome, "
                   + "u.level as level, "
                   + "(SELECT count(*) FROM UserLikes likes WHERE likes.user = u.idUser) as totalLikes "
            + "FROM User u WHERE u.email = :email";
        try {
            Query query = session.createQuery(hql);
            query.setString("email", email);
            query.setResultTransformer(Transformers.aliasToBean(User.class));
            user = (Usuario) query.uniqueResult();

        } catch (RuntimeException ex) {
            throw ex;
        } finally {
            session.close();
        }

        return user;
    }

The above code returns the User normally, however returns null when the User to search in the database do not have value set in the field level. That is, if I am not wrong, hibernate does an inner join user / level and not a left join, making returns null.

Does anyone have any idea how to get around this?

解决方案

i think you need use this.

@ManyToOne //simple
@JoinColumn(nullable = true) simple

and in your query using simple too.

FROM User u WHERE u.email = :email

i use this in similiar project and worked.

Good job man.

这篇关于Hibernate在用@ManyToOne查询时返回null hql的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆