Spring Boot/Doma/Entity

Spring Boot/Doma/Entity

乱暴に言うとテーブルの1レコードに相当するモノをJava側にマッピングするためのインスタンスのためのクラスである。

作り方

まず対応するテーブルがこのようである場合

CREATE TABLE `hoge`.`customer` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` VARCHAR(45) NULL,
  `age` INT NULL,
  PRIMARY KEY (`id`));

このように作成する。

@Entity
public class Customer {
 
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;
    private String name;
    private Integer age;
 
    protected Customer() {}
 
    public Customer(String name, Integer age) {
        this.name = name;
        this.age = age;
    }
 
    @Override
    public String toString() {
        return String.format(
                "Customer[id=%d, name='%s', age='%d']",
                id, this.name, this.age);
    }
}

このように作ると。名前から類推して勝手にマッピングしてくれる予定。

CUD の処理の際に別の処理を割り込ませる

つまり、新規作成、更新、削除の処理の前後に特定のクラスを指定することで処理を割り込ませることができる。

これをエンティティリスナーと言う

Entity 名とまったくちがうテーブルをマッピングしたい

そいう場合は Table アノテーションでズバリ指定する

@Entity
@Table(name = "hoge")
public class piyo {
}

テーブルと関係なくフィールドを持ちたい

Transient(過渡的な) アノテーションをつける

@Transient
List<String> hogeList;

ManyToOne 関係のマッピング

S2JDBC とかにある超便利機能で、Entity のフィールドに別 Entity を持たせると、その Entity の対応するテーブル同士を結合したクエリを投げた場合に結果を巧妙に詰め替えてくれるというモノ。

残念ならが Doma にはそういう機能は無いらしく Dao も複雑なロジックは書けないので、そういうことやんなというフレームワークからのメッセージである。やりたい場合は、結合結果の全フィールド受ける新しいフィールドを作ってやってねという話のようだ。

当然ながら OneToMany も不可能である。

java/spring/spring_boot/doma/entity.txt · 最終更新: 2018-11-06 22:28 by ore