2009-04-28 4 views
0

Hibernateエンティティ用のIDを含む(休止していない)データベーステーブルがあります。私は(createSQLQueryを使用して)それらを照会することができます。これは私にIDを与え、そこからエンティティをロードすることができます。SQLQuery結果のIDカラムからHibernate Entityインスタンスを取得します。

私はそれを1つのステップで行いたいと思いますが、私はaddEntityでそれを行うことができると思いますが、どのくらい正確かはわかりません。 (HibernateのドキュメンテーションWebサイトはもう一度です。)addEntityは、エンティティテーブルのすべてのカラムが存在する場合に使用できますが、今はidだけしか持っていません。

これは行方不明の列文句:

return (List<MyEntity>) session.createSQLQuery(
      "select entity_id from the_table where foreign_key_value = ?") 
      .addEntity("entity_id", MyEntity.class) 
      .setLong(0, foreignKey).list(); 
+0

これはあなたがこれまでに来たことがありますか? –

答えて

0

私はオラクルの方言について

select * 
from entity_table 
where entity_id = (select entity_id 
        from non_hibernate_table 
        where id = ?) 
+0

それを行うことができますが、私はHibernateの仕事をしています:-) また、これは遅延読み込みとエンティティキャッシュをスキップします。 – Thilo

0

に参加使用します。 uはJavaデータ型へのマッピングデータベースのカラム型に問題がある場合はuがそのようにそれを手動で設定することができます。

session.createSQLQuery("select {entity.*} from entity_table {entity} where ....") 
    .addEntity("entity", Entity.class).(bind-parameters).list(); 

Hibernateが「拡大していきます{エンティティ:.addScalar("integerFieldName", Hibernate.INTEGER)

public class LookupCodeName 
{ 
    private String code; 
    private String name; 

/*... getter-setters ... */ 
} 

public class someBL { 

public List<LookupCodeName> returnSomeEntity() { 
     SQLQuery sqlQuery = (SQLQuery)((HibernateSession)em).getHibernateSession() 
       .createSQLQuery("SELECT st.name as name, st.code as code FROM someTable st") 
       .addScalar("code") 
       .addScalar("name") 
.setResultTransformer(Transformers.aliasToBean(LookupCodeName.class)); 
    } 
return (List<LookupCodeName>)sqlQuery.list(); 
} 
1

私はあなたのような何かをしたいと思います。 *} "がentity_tableからの関連する列になるようにします。

IDをすでに持っている場合は、単にsession.load()を使用して、実際のインスタンス(遅延ロードプロキシ)に変換できます。

関連する問題