EJB3.0是一份规范,该规范由不一样的部分组成:php
- 第一部分为session bean和message-driven bean定义了新的编程模型,以及部署规则等等;
- 第二部分专门定义了持久化相关的规范:实体,对象/关系映射元数据,持久化管理接口和查询语言。
第二部分就是咱们所说的JPA(Java Persistence API),之因此取名叫JPA,颇有多是由于持久化的接口位于javax.persistence.css
参考此连接下载和安装开发环境,并在Jboss应用服务器上部署EJB3.0.html
EJB 3规范的 JPA 工程
和一个远程访问的 java 应用客户端
。@Entity
注解的普通 Java Bean 类对象-关系表
映射)JPA定义了整套数据持久化规范,让咱们来看看它是如何在数据存储模式下工做的。假设你已有一个project表,以下所示。java
Field | Type | Key | Extra |
---|---|---|---|
pname | varchar(255) | ||
pnumber | int | Primary Key | auto_increment |
plocation | varchar(255) | ||
dept_no |
jpadb
的database中示例程序:node
sudo service mysql start mysql -u [name] -p [password]
create database jpadb;
use jpadb;
CREATE TABLE project ( pname varchar(255), pnumber int PRIMARY KEY AUTO_INCREMENT, plocation varchar(255), dept_no int );
打开Eclipse IDE,按照如下三步建立一个新的EJB工程:mysql
输入工程名FirstJPAProject
,并按下图选择Runtine和module:nginx
单击“Next” -> “Next” -> “Finish”.git
在这个简单的示例中,咱们只有一个“Project”实体类,它是一个不含业务逻辑的java简单对象。这个类能够不用作任何改变运行在Java SE和Java EE环境(取代了Entity Bean,JPA规范不拘于Java EE平台)。在这个示例中,咱们使用在Java EE环境中。
咱们将ejbModule
-> New
-> Class
github
com.ibytecode.entities
Project
Finish
复制下面的代码 :web
1 package com.ibytecode.entities; 2 3 import java.io.Serializable; 4 import javax.persistence.Entity; 5 import javax.persistence.Id; 6 import javax.persistence.Column; 7 8 @Entity(name = "project") 9 public class Project implements Serializable { 10 private static final long serialVersionUID = 1L; 11 12 public Project() { 13 super(); 14 } 15 16 @Id 17 private int pnumber; 18 private String pname; 19 private String plocation; 20 21 @Column(name = "dept_no") 22 private int deptNo; 23 24 public int getPnumber() { 25 return pnumber; 26 } 27 public void setPnumber(int pnumber) { 28 this.pnumber = pnumber; 29 } 30 public String getPname() { 31 return pname; 32 } 33 public void setPname(String pname) { 34 this.pname = pname; 35 } 36 public String getPlocation() { 37 return plocation; 38 } 39 public void setPlocation(String plocation) { 40 this.plocation = plocation; 41 } 42 public int getDeptNo() { 43 return deptNo; 44 } 45 public void setDeptNo(int deptNo) { 46 this.deptNo = deptNo; 47 } 48 @Override 49 public String toString() { 50 return "Project [pnumber=" + pnumber + ", pname=" + pname 51 + ", plocation=" + plocation + ", deptNo=" + deptNo + "]"; 52 } 53 }
注意:
上面的代码中并无@Table
标注。根据默认规则,@Entity
标注中的name
属性会被认为是表名。相似的,若是一个变量名和表中的某一列的属性名匹配,就不须要加@Column
标注。