MappedSuperclass
多数のエンティティビーンで共通のプロパティには@MappedSuperclass
を使用します。
@Id
、@Version
、@WhenModified
プロパティを持つマッピングされたスーパークラスがあり、マッピングされたスーパークラスがModel
を拡張するのが一般的です。
package org.example.domain;
import io.ebean.Model;
import io.ebean.annotation.WhenCreated;
import io.ebean.annotation.WhenModified;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import javax.persistence.Version;
import java.time.Instant;
/**
* Base domain object with Id, version, whenCreated and whenModified.
*/
@MappedSuperclass
public abstract class BaseDomain extends Model {
@Id
long id;
@Version
Long version;
@WhenCreated
Instant whenCreated;
@WhenModified
Instant whenModified;
// getters and setters
...
}
package org.example.domain
import io.ebean.annotation.WhenCreated
import io.ebean.annotation.WhenModified
import java.time.Instant
import javax.persistence.Id
import javax.persistence.MappedSuperclass
import javax.persistence.Version
@MappedSuperclass
open class BaseDomain : Model() {
@Id
var id: Long = 0
@Version
var version: Long = 0
@WhenModified
lateinit var whenModified: Instant
@WhenCreated
lateinit var whenCreated: Instant
}
その後、エンティティビーンがこれを拡張して共通のプロパティを継承します。
CustomerはBaseDomainを拡張します
...
@Entity
public class Customer extends BaseDomain {
String name;
LocalDate registered;
...
package org.example.domain
import javax.persistence.Entity
@Entity
class Customer : BaseDomain() {
var name: String? = null
}
Kotlinには複数のコンストラクタスタイルがあります。エンティティビーンの優先コンストラクタスタイルの詳細はこちらを参照してください。