私は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しないためには、本当に迷惑なんだが、私はコレクションは、私は良い情報を持っている必要がありますインスタンス化していた場合に...
誰もがアイデアを持っていますどうやってするの ?
おかげで、
Javaを表示してください。「成功しない」という意味も役立ちます。 – Osw
クエリを実行すると結果は何ですか?(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
これは、数式の数が多いすべてのデータを表示します。サンプル:nom0.15039481770844532 \t prenom nom0.46579385535806883 \t prenom .. – RoD