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")

Customer表は、JVMシステム・プロパティ sys_nsで定義されたネームスペースに作成されます。システム・プロパティが存在しない場合、SpEl式は空の文字列に評価され、その場合、表はデフォルトのネームスペースsysdefaultに作成されます。

systemProperties属性は事前定義された変数です。

JVMシステム・プロパティで実行するには、次を使用します。
java -Dsys_ns=myCustomNamespace ...
@NosqlTable(tableName = "#{ @environment.getProperty('ENV_NS')}:Customer")

Customer表は、環境プロパティENV_NSで定義されたネームスペースに作成されます。環境変数が存在しない場合、表はデフォルトのネームスペースsysdefaultに作成されます。

環境プロパティを設定して実行するには、次を使用します。
ENV_NS=myCustomNamespace; java ...
@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")
この例では、ネームスペースは次の順序で評価されます。
  1. JVMシステム・プロパティsys_nsで定義されたネームスペース内。
  2. sys_nsが使用できない場合は、環境変数ENV_NSが試行されます。
  3. ENV_NSが使用できない場合は、application.propertiesリソース・ファイルのapp.nsプロパティで定義されたネームスペースが試行されます。
  4. 前述のいずれも使用できない場合、Customer表はsrcNsネームスペースに作成されます。
@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 +
            '}';  
    }
}