hibernateでのクエリは、List、Map、クラスオブジェクトを使用して戻りタイプをカスタマイズします.
2525 ワード
hibernateを使用してクエリーを行う場合、最も多く使用されるのはhqlを構築してクエリーを行うことです.クエリーのプロセスでは、頻繁なクエリー・オブジェクト・メソッドのほかに、プロパティや集計結果のセットをクエリーする場合もあります.この場合、通常、返される構造を処理する必要があります.一般的には、hqlを構築し、queryのresultTransformerを設定することで、返される結果のタイプをカスタマイズします.一般的にmapプロパティに設定されます.以下に示します.
Query query = session.createQuery("hql");?
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
をクリックして、クエリー結果の各項目をmapとして指定します.しかし、hibernateの発展に伴い、listやmapのような集合クエリー文をhqlで直接使用することができます.以下では,ListとMapを用いた場合のクエリ文とクエリ結果についてそれぞれ説明する.まず、データベースのデータは次のようになります.
mysql> select * from p_dictionary;
+-----------------+----+---------+------+--------+--------+
| dictionary_type | id | version | code | forbid | value |
+-----------------+----+---------+------+--------+--------+
|COUNTY|1|0|001||四川|
|COUNTY|2|0|002||北京|
|COUNTY|3|0|001|NULL|四川|
+-----------------+----+---------+------+--------+--------+
リストとmapを使用したクエリー文とクエリー結果について説明します.
Listの使用
String query = "select new List(p.code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
System.out.println(list);
//結果:[[001,四川],[02,北京],[001,四川]]
?
Mapを使用して、まずaliasを指定しないと、結果のキーはクエリの順序で結果を表し、0,1を使用してkeyを表す
String query = "select new Map(p.code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
//結果:[{1=四川、 0=001},{1=北京, 0=002},{1=四川, 0=001}]
?
Mapを使用してaliasを指定すると、結果のkeyはaliasになります.
String query = "select new Map(p.code as code, p.value as value) from Dictionary p";
List list = session.createQuery(query).list();
//結果:[{value=四川、 code=001},{value=北京, code=002},{value=四川, code=001}]
?
部分的にaliasを使用し、部分的に使用しない場合、aliasを使用するとkeyとしてaliasを使用し、使用しない場合はシーケンス番号を使用します.シーケンス番号はクエリー結果のシーケンス番号です.
String query = "select new Map(p.code as code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
//結果:[{1=四川、 code=001},{1=北京, code=002},{1=四川, code=001}]
--------------------------------------------------------------------------------------------------
select new List(p.name, p.address) from Person as p ;select選択した属性をリストオブジェクトに格納select new ClassTest(p.name, p.address) from Person as p;selectは選択した属性をオブジェクトにカプセル化し,ClassTestがp.name,p.addressの構造関数,select newをサポートすることを前提とする. Map(p.name as personName) from Person as p ;selectは選択した式を別名と命名し、new Map()と組み合わせてMap構造を選択し、personNameをkeyとし、実際に選択した値をvalueとします.
Query query = session.createQuery("hql");?
query.setResultTransformer(CriteriaSpecification.ALIAS_TO_ENTITY_MAP);
をクリックして、クエリー結果の各項目をmapとして指定します.しかし、hibernateの発展に伴い、listやmapのような集合クエリー文をhqlで直接使用することができます.以下では,ListとMapを用いた場合のクエリ文とクエリ結果についてそれぞれ説明する.まず、データベースのデータは次のようになります.
mysql> select * from p_dictionary;
+-----------------+----+---------+------+--------+--------+
| dictionary_type | id | version | code | forbid | value |
+-----------------+----+---------+------+--------+--------+
|COUNTY|1|0|001||四川|
|COUNTY|2|0|002||北京|
|COUNTY|3|0|001|NULL|四川|
+-----------------+----+---------+------+--------+--------+
3 rows in set (0.00 sec)
リストとmapを使用したクエリー文とクエリー結果について説明します.
Listの使用
String query = "select new List(p.code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
System.out.println(list);
//結果:[[001,四川],[02,北京],[001,四川]]
?
Mapを使用して、まずaliasを指定しないと、結果のキーはクエリの順序で結果を表し、0,1を使用してkeyを表す
String query = "select new Map(p.code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
//結果:[{1=四川、 0=001},{1=北京, 0=002},{1=四川, 0=001}]
?
Mapを使用してaliasを指定すると、結果のkeyはaliasになります.
String query = "select new Map(p.code as code, p.value as value) from Dictionary p";
List list = session.createQuery(query).list();
//結果:[{value=四川、 code=001},{value=北京, code=002},{value=四川, code=001}]
?
部分的にaliasを使用し、部分的に使用しない場合、aliasを使用するとkeyとしてaliasを使用し、使用しない場合はシーケンス番号を使用します.シーケンス番号はクエリー結果のシーケンス番号です.
String query = "select new Map(p.code as code, p.value) from Dictionary p";
List list = session.createQuery(query).list();
//結果:[{1=四川、 code=001},{1=北京, code=002},{1=四川, code=001}]
--------------------------------------------------------------------------------------------------
select new List(p.name, p.address) from Person as p ;select選択した属性をリストオブジェクトに格納select new ClassTest(p.name, p.address) from Person as p;selectは選択した属性をオブジェクトにカプセル化し,ClassTestがp.name,p.addressの構造関数,select newをサポートすることを前提とする. Map(p.name as personName) from Person as p ;selectは選択した式を別名と命名し、new Map()と組み合わせてMap構造を選択し、personNameをkeyとし、実際に選択した値をvalueとします.