S2JDBCでジェネレーション ギャップ パターン

エンティティは @MappedSuperclass が指定されたクラスを継承できます。

@MappedSuperclass には、エンティティと同じように永続プロパティを定義できます。 定義された永続プロパティは、サブクラスの永続プロパティとみなされます。 スーパークラスとサブクラスでインスタンスフィールドの名前が重複しないように定義してください。


S2JDBC でもジェネレーション ギャップ パターンが動作するようですね。
サクッと対応させて検証してみたところ、無事に動作しました。

オリジナルの Empエンティティ

Emp.java

package sample.entity;

import java.util.Date;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

@Entity
public class Emp {

    @Id
    @GeneratedValue
    public Integer id;

    public String name;

    @Temporal(TemporalType.DATE)
    public Date hireDate;
    
    public Integer deptId;

    @ManyToOne
    public Dept dept;

    @Version
    public Integer versionNo;
}

ジェネレーション ギャップ パターンに対応させた Empエンティティ

AbstractEmp.java

package sample.entity.base;

import java.util.Date;

import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import sample.entity.Dept;

@MappedSuperclass
public class AbstractEmp {

    @Id
    @GeneratedValue
    public Integer id;

    public String name;

    @Temporal(TemporalType.DATE)
    public Date hireDate;
    
    public Integer deptId;

    @ManyToOne
    public Dept dept;

    @Version
    public Integer versionNo;
}


Emp.java

package sample.entity;

import javax.persistence.Entity;

import sample.entity.base.AbstractEmp;

@Entity
public class Emp extends AbstractEmp {

}