Lombok サポート
Doma は、Lombok 1.16.12 以降をサポートしています。
注釈
Eclipse を使用する場合は、バージョン 4.5 以降を使用してください。
概要
Lombok と Doma は両方ともアノテーションプロセッサを提供します。アノテーションプロセッサの実行順序は Java では決定されないため、Doma のアノテーションプロセッサは、Lombok アノテーションプロセッサによって行われたクラスの変更を常に認識するとは限りません。
この問題を解決するために、Doma のアノテーションプロセッサは Lombok のアノテーションのいくつかを認識し、その動作を変更します。たとえば、Doma のアノテーション プロセッサが @lombok.Value
アノテーションが付けられたクラスを見つけた場合、そのクラスにはすべてのインスタンス フィールドに対応するパラメータを引数で受け取るコンストラクタがあると想定します。
ベストプラクティス
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;
}