Lombok サポート
Doma は、Lombok 1.16.12 以降をサポートしています。
注釈
Eclipse を使用する場合は、バージョン 4.5 以降を使用してください。
概要
LombokとDomaの両方がアノテーションプロセッサを利用しています。Javaはアノテーションプロセッサの実行順序を特定の順番で保証していません。つまり、DomaのプロセッサがLombokがクラスの変更を終える前に実行される可能性があります。
この問題を解決するために、DomaのアノテーションプロセッサはLombokのアノテーションのいくつかを認識し、その動作を調整します。例えば、Domaのアノテーションプロセッサが @lombok.Value が付けられたクラスを見つけると、そのクラスには全てのインスタンスフィールドに対応するパラメータを持つコンストラクタがあると仮定します。
ベストプラクティス
こちらは、DomaクラスでLombok注釈を使用するための推奨パターンです。
エンティティクラスの定義
不変エンティティクラス
@Entityのimmutable要素にtrueを指定する@lombok.Valueまたは@lombok.AllArgsConstructorのいずれかを指定する@lombok.AllArgsConstructorの場合、ゲッターを生成するには@lombok.Getterを指定する
@Entity(immutable = true)
@Value
public class Employee {
@Id
Integer id;
String name;
Age age;
}
@Entity(immutable = true)
@AllArgsConstructor
@Getter
public class Worker {
@Id
private final Integer id;
private final String name;
private final Age age;
}
可変エンティティクラス
デフォルトのコンストラクターを定義する
ゲッター/セッターを生成するには、
@lombok.Dataまたは@lombok.Getter/@lombok.Setterを指定する
@Entity
@Data
public class Person {
@Id
private Integer id;
private String name;
private Age age;
}
@Entity
@Getter
@Setter
public class Businessman {
@Id
private Integer id;
private String name;
private Age age;
}
ドメインクラスの定義
@lombok.Valueを指定するvalueという名前のインスタンスフィールドを 1 つだけ定義する
@Domain(valueType = Integer.class)
@Value
public class Age {
Integer value;
}
埋め込み可能クラスの定義
@lombok.Valueまたは@lombok.AllArgsConstructorのいずれかを指定する@lombok.AllArgsConstructorの場合、ゲッターを生成するには@lombok.Getterを指定する
@Embeddable
@Value
public class Address {
String street;
String city;
}
@Embeddable
@AllArgsConstructor
@Getter
public class Location {
private final String street;
private final String city;
}