2011-01-24 17 views
0

私はJPAをHibernateで使用しており、アノテーションの設定をしています。hibernate/JPAのカスタム選択

カスタム "select"を探していて、コレクションを取得せずに "lazy collection"のサイズを知ることができます。

が、私は成功せず、これを試してみました:私のテストで

@Entity 
@Table(name="t_test") 
public class Test { 

@Id 
@Column(name="name", length=50) 
private String name; 

@Column(name="first_name", length=50) 
private String firstName; 

@ElementCollection(fetch=FetchType.LAZY) 
@JoinTable(name = "tj_test_nicknames", schema="", 
    joinColumns = {@JoinColumn(name = "name")} 
) 
@ForeignKey(name = "FK_test_nickname") 
@Column(name="nickname", nullable=false) 
private Set<String> nickNames = new HashSet(); 

@Formula("(SELECT COUNT(t.nickname) FROM tj_test_nicknames t WHERE t.name = name)") 
private int counter; 

を、私はちょうど

Test test = new Test(); 
test.setFirstName("prenom"); 
test.setName("nom" + Math.random()); 

Set<String> nickNames = new HashSet<String>(); 
nickNames.add("surnom"); 
nickNames.add("toto"); 
test.setNickNames(nickNames); 

testDAO.save(test); 

Collection<Test> tests = testDAO.getAll(); 
if(tests!=null){ 
    for (Test testT : tests) { 
     logger.info("Number of nicknames: " + testT.getNumberOfNicknames()); 
     logger.info("Size of the list:: " + testT.getNickNames().size()); 
    } 
} 

(のための古典との)カウンター番号を表示しようとしている。しかし、私は0を表示各オブジェクトインスタンス(インスタンス化された遅延コレクション)

org.hibernate.pretty.Printerリストエンティティ...

テスト{カウンタ= 2、名前= nom0.46579385535806883、のfirstName = prenom、ニックネーム=}

テスト{カウンタ= 0、名前= nom0.6489676574372193、のfirstName = prenom、ニックネーム= [TOTO、surnom]} ​​

テスト{カウンタ= 2、名前= nom0.6362777689140984、のfirstName = prenom、ニックネーム=}

テスト{カウンタ= 2、name = nom0.150394817708445 32、のfirstName = prenom、ニックネーム=}

テスト{カウンタ= 2、名前= nom0.5580054662200352、のfirstName = prenom、ニックネーム=}

EDIT: ので、私はそれは場合だと理解しました遅延コレクションnickNamesは、それが0であって良い数ではないことを返すようにインスタンス化されています。

だから私はサイズを取得したいように、コレクションをintanciateしないためには、本当に迷惑なんだが、私はコレクションは、私は良い情報を持っている必要がありますインスタンス化していた場合に...

誰もがアイデアを持っていますどうやってするの ?

おかげで、

+0

Javaを表示してください。「成功しない」という意味も役立ちます。 – Osw

+0

クエリを実行すると結果は何ですか?(test0_.nameをname0_、test0_.first_nameをfirst2_0_として選択します(SELECT COUNT(t.nickname)FROM tj_test_nicknames t WHERE t.name = test0_.name)as formula0_ from t_test test0_)データベース上で直接? – Ralph

+0

これは、数式の数が多いすべてのデータを表示します。サンプル:nom0.15039481770844532 \t prenom nom0.46579385535806883 \t prenom .. – RoD

答えて

1

クエリは(任意のテーブルキーワードがあってはならない)ようになります。

((整数)session.createQuery( "SELECT COUNT(*)から....") .iterate()。next()).intValue();あなたのクエリは少し奇妙に見えるとにかく

+0

彼はJPAを使用していますが、それはJPA – DataNucleus

+0

ではありません。私はそれに気付きませんでした。 – malejpavouk

0

休止documentationから

その:私はIDがあなたの主キーであることをexcpectので、ID = XYZのみが返さsouldどこカウントは0または1は - たぶん、問題はあなたのクエリです。

+0

私はよく分かりません。私は簡単なサンプルを投稿します。 – RoD

関連する問題