NosqlTable.tableName
注釈でのSpEl式の使用
表の名前を指定するには、@NosqlTable
注釈にtableName
パラメータを設定します。前述のStudentクラスの例では、tableName
が明示的に指定されていないため、デフォルトで空の値が設定され、エンティティ・クラス名がSpringドライバによって表の名前として使用されます。
Spring式言語(SpEl)は、実行時に複雑な式を評価する方法です。詳細は、Spring式言語を参照してください。
@NosqlTable.tableName
パラメータは、(SpEl)式の評価をサポートします。次の例に示すように、@NosqlTable
注釈にtableName
パラメータを設定するときに、SpEL式を使用できます。式は実行時に動的に評価されます。
表1-1 SpEL式の使用
tableName パラメータのSpEL式
|
説明 |
---|---|
@NosqlTable(tableName = "#{ systemProperties['sys_ns']}:Customer") |
systemProperties属性は事前定義された変数です。 JVMシステム・プロパティで実行するには、次を使用します。
|
@NosqlTable(tableName = "#{ @environment.getProperty('ENV_NS')}:Customer") |
環境プロパティを設定して実行するには、次を使用します。
|
@NosqlTable(tableName = "${app.ns}:Customer") | Customer 表は、application.properties リソース・ファイルのapp.ns プロパティによって定義されたネームスペースに作成されます。プロパティが存在しない場合はエラーがスローされます。
|
@NosqlTable(tableName = "${app.ns}:Customer") | Customer 表は、application.properties リソース・ファイルのapp.ns プロパティによって定義されたネームスペースに作成されます。プロパティが存在しない場合、表はネームスペースns2 に作成されます。
|
@NosqlTable(tableName = "#{ systemProperties['sys_ns'] != null ? systemProperties['sys_ns'] : @environment.getProperty('ENV_NS') != null ? @environment.getProperty('ENV_NS') : '${app.ns:srcNs}' }:Customer") |
この例では、ネームスペースは次の順序で評価されます。
|
@NosqlTable(tableName = ":Customer") |
SpEl式'#'および'$'が使用され、結果が""空の文字列ネームスペースである場合、開始コロン':'は自動的に無視されます。 この例では、どちらも存在しないため、エラーが返されます。 |
ネームスペース管理の詳細は、Javaダイレクト・ドライバ開発者ガイドのネームスペースの概要を参照してください。
例:
Student
エンティティ・クラスを作成し、@NosqlTable
注釈に必要な表名(Customer)およびネームスペース(JVMシステム・プロパティsys_ns
)を指定します。SpringドライバはSpEL式を評価し、Customer
表はsys_ns
ネームスペースに作成されます。ネームスペースが存在しない場合、表はsysdefault
ネームスペースに作成されます。import com.oracle.nosql.spring.data.core.mapping.NosqlId;
import com.oracle.nosql.spring.data.core.mapping.NosqlTable;
/* The @NosqlTable annotation specifies that this class will be mapped to an Oracle NoSQL Database table. */
/* Sets the table name. */
@NosqlTable(tableName = "#{ systemProperties['sys_ns']}:Customer")
public class Student {
/* The @NosqlId annotation specifies that this field will act as the ID field.
The generated=true attribute specifies that this ID will be auto-generated by a sequence. */
@NosqlId(generated = true)
long id;
String firstName;
String lastName;
/* public or package protected constructor required when retrieving from database. */
public Student() {
}
/* This method overrides the toString() method, and then concatenates id, firstname, lastname,
and then returns a String. */
@Override
public String toString() {
return "Student{" +
"id=" + id + ", " +
"firstName=" + firstName + ", " +
"lastName=" + lastName +
'}';
}
}