惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
Blog — PlanetScale
Blog — PlanetScale
V
Visual Studio Blog
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
博客园 - Franky
IT之家
IT之家
博客园 - 叶小钗
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
雷峰网
雷峰网
腾讯CDC
博客园 - 聂微东
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
V2EX
人人都是产品经理
人人都是产品经理
MongoDB | Blog
MongoDB | Blog
大猫的无限游戏
大猫的无限游戏
Martin Fowler
Martin Fowler
宝玉的分享
宝玉的分享
博客园_首页
G
Google Developers Blog

博客园 - patrickwai

java enum用法 Java中哈希表(Hashtable)是如何实现的 注意for循环中变量的作用域 用SAX Parser(Simple API for XML)分析RSS android权限 【转】分治法求最大值最小值 JPA实体关系映射 Servlet实现基本文件上传 Servlet学习(一) 用javascript与正则表达式验证表单 - patrickwai - 博客园 java题目分析 java中的synchronized Spring学习——依赖注入 Spring学习——Hello World xml,javascript,XMLHttpRequest 学习笔记 向依赖关系宣战——依赖倒置、控制反转和依赖注入辨析[转载] MySql存储过程学习 自己用C语言写的扫雷算法 移位运算实际应用——判断整数N是否为2的阶次方
JPA基本实体映射学习
patrickwai · 2010-10-06 · via 博客园 - patrickwai

一个实体类必须遵循一下要求:

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 Types
  • 其他实体或实体集合
  • 内嵌类

基本实体映射

@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;

    … …

}