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
標註。