マッピングアノテーション
@FhirResourcePart
@FhirResourcePart(resourceType="Patient", converter=PatientPropertyConverter.class)
public class PatientResourceResource extends ResourceResource\<Patient> {
ResourceResource
インターフェイスの実装クラスに付与するアノテーションです。
マッピング先のFHIRリソースクラスの単純名と、値の変換に使用するコンバータクラスを指定します。
引数
- resourceType(省略不可)
- マッピング先のFHIRリソースクラスの単純名を指定します。
- converter(省略不可)
- 値の変換に使用するコンバータクラスを指定します。
@FhirComposition
@FhirComposition
private PatientEntity patientEntity;
@FhirComposition(target="contact", tag = "Patient")
public List\<PersonEntity> personEntities;
ResourceResource
インターフェイスの実装クラスが保持している、DBエンティティのフィールドに付与するアノテーションです。
指定したフィールドが、DBエンティティであることを示します。
@FhirComposition
はネストが可能です。
@FhirComposition
が付与されたフィールドのクラス内で、さらに他のクラスを@FhirComposition
で参照可能です。
引数
- target
- この引数を省略した場合は、対象のDBエンティティが、FHIRリソースそのものの値を保持していることを示します。その場合、指定したフィールドは
List
であってはなりません。 - この引数を指定した場合は、対象のDBエンティティが、指定した値を名前とするFHIRリソースプロパティの値を保持していることを示します。
- この引数を省略した場合は、対象のDBエンティティが、FHIRリソースそのものの値を保持していることを示します。その場合、指定したフィールドは
- choice
- マッピング先のFHIRリソースプロパティがChoice型の場合に、代入する型の単純名を指定します。
- targetTag
- 対象のDBエンティティが、複数のFHIRリソースのマッピングに使用される場合に指定します。
- 対象のDBエンティティに含まれるマッピングアノテーションの内、この値と一致する
tag
が指定されている、またはtag
が指定されていないアノテーションのみが有効になります。
- tag
- 対象のDBエンティティが、複数のFHIRリソースのマッピングに使用される場合に指定します。
- この値が
@FhirComposition
のtargetTag
の指定と一致する場合のみ、本アノテーションが有効になります。 - 配列で複数の
tag
を指定可能です。
// 配列で複数のtagを指定可能
tag = {"tag1", "tag2"}
// tagがひとつだけの場合は中括弧を省略可能
tag = "tag1"
継承関係を持ったDBエンティティクラスに対するアノテーション
例えばChildEntity extends ParentEntity
のような場合、ChildEntity
とParentEntity
の両方のフィールドにアノテーションを付与します。
さらにResourceResource
インターフェイスの実装クラスに、以下のようにアノテーションを付与します。
@FhirComposition
private ParentEntity parentEntity;
@FhirComposition
private ChildEntity childEntity;
@Override
public void preProcess(Xxx dst, PropertyConverter conv) {
this.parentEntity = (ParentEntity) childEntity;
// ChildEntityのsetterなどで設定してもよい
}
DBの複数のテーブルとResourceResource
インターフェイスのマッピング
「方法1 - 一つのDBエンティティに複数テーブルの情報を持たせる」
DAO内のSQLクエリで複数のテーブルを結合した結果を取得して、それらの値を一つのDBエンティティにセットします 。
一回のSQLクエリで必要な値を全て取得するのが難しい場合は、SQLクエリを複数回に分けていただいても構いません。
「方法2 - 複数のDBエンティティに対して@FhirComposition
アノテーションを付与する」
ResourceResource
インターフェイスの実装クラスのフィールドに複数のDBエンティティを持たせて、それぞれに@FhirComposition
アノテーションを付与します。
@RequiredArgsConstructor
@FhirResourcePart(resourceType = "Observation", converter = ObservationPropertyConverter.class)
public class ObservationResourceResource extends ResourceResource\<Observation> {
// 中略
@FhirComposition
@Getter
@Setter
private ObservationEntity observationEntity;
@FhirComposition
@Getter
@Setter
private SpecimenEntity specimenEntity;
}
DBエンティティは入れ子にすることも可能です。
@RequiredArgsConstructor
@FhirResourcePart(resourceType = "Observation", converter = ObservationPropertyConverter.class)
public class ObservationResourceResource extends ResourceResource\<Observation> {
// 中略
@FhirComposition
@Getter
@Setter
private ObservationEntity observationEntity;
}
public class ObservationEntity {
// 中略
// 入れ子にしたDBエンティティにさらに@FhirCompositionを付与する
@FhirComposition
private SpecimenEntity specimenEntity;
}
@FhirMap
@FhirMap(target="birthDate")
private LocalDateTime birthday;
@FhirMap(target = "subject", converter = "subject")
private String patientId;
主にDBエンティティの、getterを持つprivate
フィールドに付与するアノテーションです。
フィールド値のマッピング方法を指定します。
getterを持つprivate
フィールド以外に、以下に対しても付与可能です。
- getterを持たない
public
なフィールド public static
なフィールド(定数など)- 引数を持たないメソッド(getterなど)
引数
- target(省略不可)
- マッピング先のFHIRリソースのプロパティ名を指定します。
- converter
- マッピング時に使用する変換メソッド名を指定します。
- 省略した場合は「simple<変換先の型の単純名>」が変換メソッド名となります。
(例えば、変換先の型がDate
型の場合は「"simpleDate"」が変 換メソッド名となります) - 単純名が同じ変換先が同時に存在する(例:
java.util.Date
とjava.sql.Date
等)場合は、いずれかの変換メソッドを異なる名前で定義して、converter
引数で変換メソッド名を指定してください。
@FhirMap(target = "name", converter = "nameList", param = "given", pg = "patientName")
private String firstName;
@FhirMap(target = "name", converter = "nameList", param = "family", pg = "patientName")
private String lastName;
- param
- 複数の引数を持つ変換メソッドの引数名を指定します。
- pg
param
をグループ化します(pgはParameter Groupの略)。- 複数の引数を持つ変換メソッドが、複数回使用される場合に指定します。
- 同じ
pg
値が指定されたparam
ごとに、変換メソッドの呼び出しが生成されます。 - デフォルト値は「
""
」です。 - 値に「
"."
」(ピリオド)を指定した場合は、「"<フィールド名>"」が指定されたものとして扱われます。 これは全てのparam
がひとつのフィールドで完結する場合(後述のconstant
を併用して複数のparam
を指定する場合など)に有用です。
@FhirMap(target = "code", converter = "code", param = "code", pg = ".")
@FhirMap(target = "code", converter = "code", param = "system", constant = "xxx", pg = ".")
@FhirMap(target = "code", converter = "code", param = "display", constant = "#\"\"", pg = "."))
private String typeCode;
- constant
- 変換メソッドへ渡す定数値を指定します。
- 指定された定数値は、変換先が文字列型の場合には文字列、列挙値の場合には列挙値、それ以外の場合にはプログラムコードそのものとして扱われます。
- ただし、文字列が「#」から始まっている場合には、2文字目以降がプログラムコードそのものとして扱われます。
例えば、空の文字列を設定したい場合は「"#\"\""
」を指定します。
(constant=""
はconstant
引数自体を指定しないことを意味するため)
@FhirMap(target = "effective", choice = "period", converter = "period", param = "start")
private LocalDateTime startDateTime;
@FhirMap(target = "effective", choice = "period", converter = "period", param = "end")
private LocalDateTime endDateTime;