マッピングアノテーション
@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;
}