一、JPA的定义及总体思想
JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA的总体思想和现有Hibernate、TopLink,JDO等ORM框架大体一致。总的来说,JPA包括以下3方面的技术:
JPA支持XML和JDK 5.0注解两种元数据的形式,元数据描述对象和表之间的映射关系,框架据此将实体对象持久化到数据库表中;
用来操作实体对象,执行CRUD操作,框架在后台替我们完成所有的事情,开发者从繁琐的JDBC和SQL代码中解脱出来。
这是持久化操作中很重要的一个方面,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合。
这是我们做项目中其中例子:(用来说明JPA的用处)
@Entity @Table(catalog="DBTeaching") public class TCourse implements Serializable { private static final long serialVersionUID = 1L; private int id; private String name; //课程名称 private transient TTeacher creator; //课程创建者 private TSemester semester; //课程所属学期 private TCourseType type; //课程类型 private transient TBranch branch; //课程所属教研室 private String memo; //课程描述 private transient Long optlockversion; @Version @Column(name="optlock") public Long getVersion() { return optlockversion; } public void setVersion(Long v) { optlockversion = v; } public TCourse() { super(); } @Id @GeneratedValue(strategy=GenerationType.AUTO) public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @ManyToOne @OnDelete(action=OnDeleteAction.CASCADE) public TTeacher getCreator() { return creator; } public void setCreator(TTeacher creator) { this.creator = creator; } @ManyToOne public TSemester getSemester() { return semester; } public void setSemester(TSemester semester) { this.semester = semester; } @ManyToOne public TCourseType getType() { return type; } public void setType(TCourseType type) { this.type = type; } @ManyToOne @OnDelete(action=OnDeleteAction.CASCADE) public TBranch getBranch() { return branch; } public void setBranch(TBranch branch) { this.branch = branch; } @Lob public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } }
注释:
@Entity是表示这个类要持久到数据库里
@Table这个是定义表名
@Version 版本 @Column(name="optlock") 数据库表中一个列表字段‘optlock’
@Id
默认情况下,JPA 持续性提供程序假设每个实体必须至少有一个用作主键的字段或属性。
使用这些批注指定以下项之一:Id是其中之一
@GeneratedValue(strategy=GenerationType.AUTO)
默认值 :GenerationType.AUTO
。
默认情况下,JPA 持续性提供程序选择最适合于基础数据库的主键生成器类型。
@ManyToOne 关系型数据库 多对一 @OnDelete(action=OnDeleteAction.CASCADE)
使用 @ManyToOne
批注:
将获取类型配置为 LAZY
如果空值不适合于应用程序,则将映射配置为禁止空值(针对非基元类型)
配置关联的目标实体(如果无法从被引用的对象类型推断出它)
配置必须层叠到关联目标的操作:例如,如果删除了拥有实体,则确保还删除关联的目标
cascade
默认情况下,JPA 不会将任何持续性操作层叠到关联的目标。 @OnDelete 就是删除时不会关联到其他目标
@Lob
默认情况下,JPA 持续性提供程序假设所有持久数据均可以表示为典型的数据库数据类型。
结合使用 @Lob
批注与 @Basic 映射,以指定持久属性或字段应作为大型对象持久保存到数据库支持的大型对象类型。
Lob 可以是二进制类型或字符类型。持续性提供程序从持久字段或属性的类型推断出 Lob 类型。
本人是刚学JPA知识,有些只是从参考书copy出来的,或许有些说的不清楚,请见谅!