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;
}
スーパークラスマッピング
組み込みエンティティークラスマッピング
@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;
… …
}
1.クラスはjavaxを使用する必要があります.persistence.Entityコメント
2.クラスにはpublicまたはprotectedのパラメータレスコンストラクタが必要です.他のコンストラクタがあります.
3.クラスはfinalとして宣言することを許さない.
4.エンティティークラスは、エンティティークラスを継承することも、非エンティティークラスを継承することもできます.非エンティティークラスは、エンティティークラスを継承します.
JPAで永続化可能なフィールドのタイプ:
基本エンティティのマッピング
@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;
… …
}