1

Account と Favorites の 2 つのテーブルを持つデータベースがあります。お気に入りは多対多のテーブルです。それは保持します:

listowner (foreign key referencing the Account primary key)
favorite (also a foreign key referencing the Account primary key)

お気に入りには、プログラム内に独自のクラスがありません。2 つのセットを保持する Account.java しかありません。

private Set<Account> favorites;
private Set<Account> listOwner;
//the getters and setters for these sets

関連するマッピング ファイル:

<set name="favorites" table="favorites" inverse="true" cascade="all">
        <key column="listowner" />
        <many-to-many column="favorite"  class="Models.Account" />
 </set>

<set name="listOwner" table="favorites" cascade="all">
        <key column="favorite" />
        <many-to-many column="listowner" class="Models.Account" />
</set>

これで、データベースへの保存は正常に機能します。リスト所有者のお気に入りのアカウントを保存し、データベースに直接アクセスしたときに彼が表示されるのを見ることができます。しかし、この情報をデータベースから再び取得することはできません。アカウントのすべてのお気に入りのリストが必要です。SQL では、これは次のようになります。

SELECT favorite 
FROM favorites 
WHERE listowner = "Bob"

私の現在の試み:

 public static List<Account> getFavorites(Account account)
{
    List<Account> list = null;
    Transaction tx = null;

    try
    {
        tx = session.beginTransaction();
        list = session.createQuery("from Account a where a.listOwner.accountName = :name").setParameter("name", account.getAccountName()).list();
        tx.commit();
    } catch (Exception e)
    {
        if (tx != null)
        {
            tx.rollback();
        }
        System.out.println("getFavorites failed");
        e.printStackTrace();
    } finally
    {
        return list;
    }
}

デバッガーによると、失敗しています

 list = session.createQuery("from Account a where a.listOwner.accountName = :name").setParameter("name", account.getAccountName()).list();

私は何を間違っていますか?例外はありません。

4

1 に答える 1