0

Hibernate の session.createSQLQuery で以下のクエリを使用しようとしています。userに対応する Entity オブジェクトには、 addressという属性があります。アドレスオブジェクトは、テーブル 'user' の 5 つのフィールドから作成されます。SQLQuery を使用しない場合、自動的に魔法のように入力されます。ただし、SQLQuery がないと、以下に示す目的の結合から得られるすべての情報を取得できません。ユーザーエンティティオブジェクトには、使用して埋めている accessPlan のような属性もあります

.addEntity("accessPlan", AccessPlan.class)

クエリ:

SELECT 
    user.*, 
    ap.*,
    country.*,
    auth.*, 
    GROUP_CONCAT(coup.code SEPARATOR ' ') coupons
FROM 
    user
    INNER JOIN access_plan ap ON (user.access_plan = ap.id)
    INNER JOIN country ON (user.country=country.code)
    LEFT JOIN user_auth auth ON (user.id = auth.userid)
    LEFT JOIN (
        SELECT 
                    trans.user_id,coupon.code
        FROM 
                    payments_transaction AS trans
        INNER JOIN payments_coupon coupon ON (trans.payments_coupon_id=coupon.id)
    ) coup ON (user.id=coup.user_id)    
GROUP BY user.id;

SQLQuery を使用しているとき に、構成された住所オブジェクトを埋める最も簡単な方法は何ですか? または 、このようなクエリに SQLQuery を使用しないようにする方法はありますか?

4

1 に答える 1

0

以下の「 複数のエンティティを返す」セクションの例を確認してください。

String sql = "SELECT ID as {c.id}, NAME as {c.name}, " + 
     "BIRTHDATE as {c.birthDate}, MOTHER_ID as {c.mother}, {mother.*} " +
     "FROM CAT_LOG c, CAT_LOG m WHERE {c.mother} = c.ID";

List loggedCats = sess.createSQLQuery(sql)
    .addEntity("cat", Cat.class)
    .addEntity("mother", Cat.class).list()

あなたの場合、猫=ユーザー、母=住所... ややそのようです。

現時点では何も試すことはありませんが、これが役立つと思います。

于 2015-08-24T12:38:08.210 に答える