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 { }