openByQuery の使用法
DBService クラスは 3 つのメソッドで openByQuery を使用します。
-
allContacts — データベース内の各 Contact インスタンスに対して、メモリ内で POJO インスタンスを開きます。
-
contactsByName — 指定された name 値を持つデータベース内の各 Contact インスタンスに対して、メモリ内で POJO インスタンスを開きます。
-
phonesByName — 指定された name の Contact インスタンスと関連するデータベース内の各 PhoneNumber インスタンスに対して、メモリ内で POJO インスタンスを開きます。
allContacts のコードは以下のとおりです。
protected Iterator allContacts ()
throws Exception
{
return objectManager.openByQuery (Contact.class, null, null);
}
contactsByName のコードは以下のとおりです。
public Contact contactsByName (String name)
throws Exception
{
String query = "name = ? Order By name";
Iterator it = objectManager.openByQuery (Contact.class, query,
new Object[]{name});
if (it.hasNext ())
return (Contact) it.next ();
throw new Exception ("Contact not found.");
}
このように記述した openByQuery は、引数に完全なクエリではなく SQL 条件を取ります。Caché ドキュメントには、SQL 条件を規定する規則のリストがあります。このリストへのリンクは、下記のメモを参照してください。
phonesByName のコードは以下のとおりです。
public Iterator phonesByName(String name)
throws Exception
{
String query = "Select Distinct contacts.PhoneNumber.%ID," +
" contacts.PhoneNumber.number, contacts.PhoneNumber.PhoneNumberType" +
" From contacts.phoneNumber Where contacts.phoneNumber.owner ->" +
" name %Startswith ?";
return objectManager.openByQuery(query, new Object[]{name});
}
このように記述した openByQuery は、引数に完全な SQL クエリを取ります。ドキュメントには、SQL クエリの内容を規定する規則のリストがあります。このリストへのリンクは、下記のメモを参照してください。
openByQuery に使用する SQL 条件と SQL クエリの規則については、"Caché Jalapeño での Java の使用法" の "Jalapeño ランタイム・ライブラリ・リファレンス" の "ObjectManager インタフェース" のセクションにある "openByQuery" エントリを参照してください。