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?