JPAプリミティブマッピング学習

4514 ワード

エンティティ・クラスは、次の要件に従う必要があります.
1.クラスはjavaxを使用する必要があります.persistence.Entityコメント
2.クラスにはpublicまたはprotectedのパラメータレスコンストラクタが必要です.他のコンストラクタがあります.
3.クラスはfinalとして宣言することを許さない.
4.エンティティークラスは、エンティティークラスを継承することも、非エンティティークラスを継承することもできます.非エンティティークラスは、エンティティークラスを継承します.
 
JPAで永続化可能なフィールドのタイプ:
  • Javaオリジナルタイプ
  • Java.lang.String
  • 直列化可能タイプ
  • Wrappersof Java primitive types
  • java.math.BigInteger
  • java.math.BigDecimal
  • java.util.Date
  • java.util.Calendar
  • java.sql.Date
  • java.sql.Time
  • java.sql.TimeStamp
  • User-definedserializable types
  • byte[]
  • Byte[]
  • char[]
  • Character[]
  • 列挙タイプEnumerated Type
  • その他のエンティティまたはエンティティのセット
  • 内蔵クラス
  •  
    基本エンティティのマッピング
    @Entity
    @SecondaryTable(name = "SALARY")
    public class Employee implements Serializable {
        @Id
        @Column(name = "EMP_ID")
        @GeneratedValue(strategy = GenerationType.SEQUENCE)
        private long id;
     
    @Basic
        @Version
    private long version;
     
        @Basic
        @Column(name = "F_NAME")
        private String firstName;
     
        @Basic
        @Column(name = "L_NAME")
        private String lastName;
     
        @Basic
        @Column(name = "GENDER")
        @Enumerated(EnumType.STRING)
        private Gender gender = Gender.Male;
     
        @Column(table = "SALARY")
        private double salary;
             ……
    }
     
     
     
    抽象的なエンティティコメント
    @Entity
    public abstract class Employee {
        @Id
        protectedInteger employeeId;
        ...
    }
    @Entity
    public class FullTimeEmployee extends Employee {
        protectedInteger salary;
        ...
    }
    @Entity
    public class PartTimeEmployee extends Employee {
        protected FloathourlyWage;
    }
     
     
    スーパークラスマッピング
     
    @MappedSuperclass
    public class Employee {
        @Id
        protected Integer employeeId;
        ...
    }
    @Entity
    public class FullTimeEmployee extends Employee {
        protected Integer salary;
        ...
    }
    @Entity
    public class PartTimeEmployee extends Employee {
        protected Float hourlyWage;
        ...
    }

     
    組み込みエンティティークラスマッピング
    @Embeddable
    //identityを共有する他のエンティティへの組み込み
    public class EmploymentPeriod {
    //@Temporalはjavaでなければなりません.util.Date and java.util.Calendarタイプのフィールドまたは属性コメント、
    //これらのタイプのフィールドまたは属性にのみコメントできます.
        @Temporal(TemporalType.DATE)
        private Calendar startDate;
        @Temporal(TemporalType.DATE)
    private Calendar endDate;
    … …
    }
    public classEmployee implements Serializable {
        … …
        @Embedded
        @AttributeOverrides( {
            @AttributeOverride(name = "startDate", column = @Column(name = "START_DATE")),
            @AttributeOverride(name = "endDate", column = @Column(name = "END_DATE")) })
        private EmploymentPeriod period;
        … …
    }