Lombok サポート

Doma は、Lombok 1.16.12 以降をサポートしています。

注釈

Eclipse を使用する場合は、バージョン 4.5 以降を使用してください。

概要

Lombok と Doma は両方ともアノテーションプロセッサを提供します。アノテーションプロセッサの実行順序は Java では決定されないため、Doma のアノテーションプロセッサは、Lombok アノテーションプロセッサによって行われたクラスの変更を常に認識するとは限りません。

この問題を解決するために、Doma のアノテーションプロセッサは Lombok のアノテーションのいくつかを認識し、その動作を変更します。たとえば、Doma のアノテーション プロセッサが @lombok.Value アノテーションが付けられたクラスを見つけた場合、そのクラスにはすべてのインスタンス フィールドに対応するパラメータを引数で受け取るコンストラクタがあると想定します。

ベストプラクティス

Lombok アノテーションを使用してクラスを定義するための推奨方法を示します。

エンティティクラスの定義

不変エンティティクラス

  • @Entityimmutable 要素に 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;
}