【问题标题】:Hibernate returns null hql in query with @ManyToOneHibernate 在使用 @ManyToOne 的查询中返回 null hql
【发布时间】:2016-10-24 19:46:47
【问题描述】:

首先,如果我的问题看起来有点业余,我深表歉意,但是我对 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)
    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;
}

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

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;
    }

上述代码正常返回User,但是当要在数据库中搜索的User没有在字段级别设置值时返回null。也就是说,如果我没记错的话,hibernate 会进行内部联接用户/级别而不是左联接,从而返回 null。

有人知道如何解决这个问题吗?

【问题讨论】:

    标签: java mysql hibernate hibernate-mapping


    【解决方案1】:

    我认为你需要使用它。

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

    并且在您的查询中也使用简单。

    FROM User u WHERE u.email = :email
    

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

    干得好,伙计。

    【讨论】:

    • 和字段 totalLikes?
    • 在 Controller 应用程序中添加另一个查询和另一个 dao。 :-D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多