sql >> データベース >  >> RDS >> Mysql

自己参加によるHibernate基準

    HibernateのCriteriaAPIで可能かもしれませんが、簡単ではありません。

    単純なケースでは、同じ関連付けパスを2回結合する必要があります(1つは A 1つはP用です ):

    Criteria gameCriteria = ((HibernateEntityManager) em).getSession().createCriteria(Game.class);
    
    Criteria playedGamesOfACriteria = gameCriteria.createCriteria("playedGames", "pga");
    Criteria accountOfACriteria = playedGamesOfACriteria.createCriteria("account", "a");
    accountOfACriteria.add(Restrictions.idEq(a.id));
    
    Criteria playedGamesOfPCriteria = gameCriteria.createCriteria("playedGames", "pgp");
    Criteria accountOfPCriteria = playedGamesOfPCriteria.createCriteria("account", "p");
    accountOfPCriteria.add(Restrictions.idEq(p.id));
    
    return gameCriteria.list();
    

    HHH-879 が原因で、これは機能しません 。

    ただし、JPAクエリを使用できます:

    Query q = em.createQuery(
            "select g "
            + "from Game g "
            + "join g.playedGames pga "
            + "join pga.account a "
            + "join g.playedGames pgp "
            + "join pgp.account p "
            + "where a = ?1 and p = ?2"
    );
    q.setParameter(1, a);
    q.setParameter(2, p);
    return q.getResultList();
    

    これはさらに少ないコードです。

    また、CriteriaAPIを非推奨 。




    1. 各GROUPBYグループの最初の行を選択しますか?

    2. mysqlはテーブルの照合をチェックします

    3. CTEからテーブルのレコードを更新します

    4. MySqlがVisualStudio2012で機能しない:タイプまたは名前空間名'MySql'が見つかりませんでした