2016-06-22 7 views
0

最初は私の質問が素人だと思われますが、hibernate/jpaとmysqlの知識はいくらか制限されています。上記Hibernateは@ManyToOneを使用したクエリでnull hqlを返します

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

:、私は、次の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; 
} 

まあ、私は次のエンティティを持っていますコードはUserを通常通り返しますが、データベース内の検索対象のUserがフィールドレベルで値を設定していない場合はnullを返します。つまり、私が間違っていない場合、休止状態は内部結合ユーザー/レベルであり、左結合ではなく、NULLを返すことです。

これを回避する方法はありますか?

答えて

3

私はあなたがこれを使用する必要があると思います。

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

あなたのクエリでも単純すぎます。

FROM User u WHERE u.email = :email 

私はこれを似たようなプロジェクトで使用しています。

グッドジョブマン。

+0

フィールドtotalLikes? – sThiago

+0

コントローラーアプリケーションで、別のクエリーと別のDAOで追加します。 :-D – FabioNoth

関連する問題