Hibernate returns null hql in query with @ManyToOne

匿名 (未验证) 提交于 2019-12-03 01:46:01

问题:

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?

回答1:

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.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!