Oracle Enterprise Pack for Eclip…
2013-07-12 22:53
417 查看
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
作者:Andrei Cioroianu
了解如何使用 Oracle Enterprise Pack for
Eclipse (OEPE) 的 Java 持久性 API (JPA) 构建 Java EE
应用程序,从而将对象映射到关系数据库。
Oracle Enterprise Pack for Eclipse (OEPE)
是一系列经认证的插件,用于开发可以从 Eclipse IDE
轻松部署到 Oracle WebLogic Server 上的 Java EE
应用程序。在本文中,您将了解如何使用 OEPE 的
Java 持久性 API (JPA) 编辑器和向导从现有表或 Java
类创建实体。您还将了解如何开发用于测试实体的会话
Bean 和 Servlet。所有这些组件都将打包到一个在
WebLogic Server 上运行的 Java EE
应用程序中。本文假设您已经安装了带有 OEPE
11g、Oracle WebLogic 10g 第 3 版和 Oracle
数据库 XE 的 Eclipse 3.4。
WebLogic,以便能够在代码中使用 Java EE API 并从 IDE
直接部署应用程序(如后文中所示)。您还将了解如何在
Eclipse 和 WebLogic 中设置数据源并使用 OEPE 11g
向导创建 JPA 项目。
在 Eclipse 中配置 Oracle WebLogic
Server
首先,确保已正确配置 WebLogic
域。要创建一个新域或查看现有域,单击
Start > Programs > Oracle
Fusion Middleware > WebLogic Server 10.3
> Tools > Configuration
Wizard。
图-1
在验证或创建 WebLogic 域之后,返回 Eclipse,单击
File > New >
Other...,选择 Server 并单击
Next。
图-2
输入服务器的主机名,选择 Oracle WebLogic
Server 10gR3 并单击
Next。
图-3
选择 WebLogic Home 并单击
Next。
图-4
选择 Server Type 和 Domain
Directory,然后单击 Finish。
图-5
要从 Eclipse 启动 WebLogic,转至 Servers
视图,右键单击 Oracle WebLogic Server 10gR3
并单击 Start。
从 Eclipse 和 WebLogic 连接到 Oracle
数据库
如果您刚刚安装 Oracle 数据库,则必须取消锁定
HR 用户,这样才可以访问 Oracle 数据库
XE 的示例模式。单击 Start > Programs
> Oracle Database 10g Express Edition
> Go To Database Home Page。使用安装
Oracle 数据库 XE 时提供的口令,以
SYSTEM 身份登录,单击
Administration > Database Users
> HR,输入 HR
用户的口令两次,选择 Unlocked 并单击
Alter User。
图-6
现在,您可以在 Eclipse 中配置数据库连接。单击
Window > Show View >
Other...,选择 Data Management >
Data Source Explorer 并单击
OK。右键单击 Database
Connections,单击 New,选择
Oracle Database Connection,输入连接名
hr,然后单击 Next。
图-7
选择 Oracle Database 10g Driver
Default,如果需要,则更改
jdbc:oracle:thin:@localhost:1521:xe URL
中的服务器名称,输入用户名 hr
及其口令,单击 Test Connection
验证所有内容都正确,然后单击
Finish。
图-8
右键单击 hr
模式,如果尚未连接,则单击
Connect,展开 hr > orcl
> Schemas,右键单击
HR,然后单击 Show in Schema
Viewer。
图-9
您还必须在 WebLogic 中配置 hr
数据源以便可以在应用程序中使用。在 Web
浏览器中打开
http://localhost:7001/console/,登录并单击
JDBC > Data Sources。单击
New,在 name 域中输入
hr,在 JNDI name 域中输入
hr,选择 Oracle
数据库类型,选择 Oracle's Driver (Thin)
Versions:9.0.1, 9.2.0, 10, 11,然后单击
Next。保留 Transaction Options
不变,单击 Next。输入数据库名称
xe、您的数据库主机名、端口号
1521、用户名
hr、口令,然后单击
Next。验证 URL(例如
jdbc:oracle:thin:@localhost:1521:xe),然后单击
Next。在最后一个屏幕中,选中
AdminServer 并单击
Finish。
重要事项! 在 WebLogic Server
Administration Console 中单击 Log
Out,以便从 Eclipse
中部署应用程序。如果您在 Eclipse
中看到以下错误,应转至 WebLogic
控制台并注销。
图-10
创建 JPA 项目
单击 File > New >
Project...在 New Project
窗口中,展开 JPA 节点并选择 JPA
Project。然后单击 Next。
图-11
输入 HRModel 作为名称,保持
Oracle WebLogic Server v10.3
目标运行时不变,使用 Utility JPA project with
Java 5.0 配置,选择 Add project to an
EAR 复选框,在 EAR Project Name
的文本域中输入 HRApp,然后单击
Next。
图-12
默认的 JPA 平台为
Generic,这意味着您仅能使用标准的 JPA
1.0 功能。如果要使用将添加到 JPA 2.0
的特性或希望配置特定于 EclipseLink JPA
实施的属性,如 Persistence Unit
Customization、Caching、Logging、Session Options 和 Schema
Generation,选择 EclipseLink 平台。选择
hr 连接,保留其余设置不变并单击
Finish。
图-13
当询问您是否要打开 JPA 透视图时,单击
Yes。
图-14
类生成 JPA 实体、如何在 JPA Entity Editor
中查看其关联、如何在 JPA Structure 和 JPA Details
视图中修改您的实体以及如何使用 JPA
配置编辑器。OEPE 11g 提供了以上所有向导。
从表创建实体
接下来,您将从 HR 模式的
DEPARTMENTS 和 EMPLOYEES
表生成两个实体类。下面包括了这些表的 CREATE
语句。由于表已经存在,您不必运行这些语句。注意看一下外键,因为我们将在后文中对其进行讨论。
右键单击新创建的 HRModel
项目,单击 JPA > Generate Custom JPA
Entities...,确保已选择 hr
连接,然后单击 Connect
图标(如果该图标处于启用状态。如果您已经连接,则该按钮处于禁用状态。)选择
DEPARTMENTS 和 EMPLOYEES
表,然后单击 Next。
图-15
在实际的应用程序中,通常,您将生成该模式的所有表的实体。但是出于学习目的,表越少越简单。JPA
向导将分析外键,为该示例所选的两个表提出三个表关联建议。
图-16
在大多数情况下,仅凭该模式所包含的信息,向导还不足以确定您到底需要什么。因此,您通常需要编辑关联。单击第一个关联,位于
DEPARTMENTS 和 EMPLOYEES
之间。将 employee 属性重命名为
manager,然后取消选中 Generate a
reference to a collection of DEPARTMENTS in
EMPLOYEES。
图-17
单击第二个关联,使每个部门与其员工相对应。此处未作更改。
图-18
单击第三个关联,使每个员工与其主管相对应。该信息也可通过前面的关联获得。因此,第三个关联是多余的,可以删除。取消选中
Generate this association 并单击
Next。
图-19
使用以下屏幕中的默认选项,输入
hr.model 作为 Package 名称,然后单击
Next。
图-20
通过最后一个屏幕,您可以更改实体名称及其属性的名称和类型。在本例中,不必进行更改。单击
Finish 生成 Java 类型。
图-21
右键单击 HRModel 项目并单击
JPA > Show in Entity
Editor,查看包含您刚刚创建的实体及其之间关系的图表。
图-22
以下是向导针对 Department
实体生成的源代码:
向导还生成了 Employee 类:
在本示例中,由于数据库模式具有关于外键的信息,因此
JPA
向导能够建议关联。但是,有时外键不是由模式显式定义的,您没有权限更改表以添加外键。在这种情况下,您仍然可以使用向导定义表关联。
重要事项!如果模式包含外键,您不必按照该部分其余步骤操作。
假设 HR
示例模式没有外键。在这种情况下,Generate
Custom Entities 向导的 Table
Associations
列表将为空,如以下屏幕所示。
图-23
要添加关联,您可以单击 + (New
Association) 按钮启动 Create New
Association 子向导。例如,如果要在此处使用
DEPARTMENT_ID 列定义 EMPLOYEES
和 DEPARTMENTS
之间的关系,按以下屏幕所示选择这两个表并单击
Next。
图-24
然后,单击 Add,选择两个表的
DEPARTMENT_ID 列,然后单击
Next。
图-25
在子向导的 Association Cardinality
屏幕中,选择 Many to one 并单击
Finish。
图-26
之后,可以在主向导中查看该关联。
图-27
总之,通过 Generate Custom Entities
向导,您可以修改建议的关联并将模式中未指定的新关联添加为外键。该方法可以在创建实体时使用。稍后在本文中您将看到,在创建实体后也可以使用
JPA Structure 和 JPA Details
视图定义和修改关联。
从 Java 类创建实体
本文的示例应用程序借助现有数据库启动,该数据库用于生成实体。也可以首先创建
Java 类,然后使用 JPA > Generate
DDL...
创建表。第三种方法是将现有类映射到现有表。在本部分中,我们将从
Java 类构建一个新实体,该类将映射到
JOBS 表,其 CREATE 语句如下所示:
在 hr.model 包中创建一个新类
Job,并粘贴以下代码:
右键单击 HRModel 项目并单击
JPA > Generate Entity from Java
Class...单击 Browse 图标,选择
hr.model.Job 类,然后单击
Next。
图-28
确保选择了 hr 连接和
HR 模式,选择 JOBS
表,保留 Primary key property 的
jobId 选择,然后单击
Next。
图-29
验证属性已正确映射到 JOBS
表的列,然后单击 Finish。
图-30
该向导将向 Job
类中添加以下批注。
使用 JPA Structure 和 JPA
Details
打开 Employee 实体,将 String
jobId 字段替换为 Job
job。还需要删除
@Column(name="JOB_ID") 批注,将
getJobId() 和 setJobId()
方法替换为 getJob() 和
setJob()。
Eclipse 将报告错误:Column "job" cannot be
resolved。转至右上角的 JPA
Structure 视图,右键单击 job
并单击 Map As > Many to
One。向导将添加 @ManyToOne
批注。
图-31
您应该在右下角看到 JPA Detail
视图。验证 job 属性仍然正确,在
Fetch 列表中选择
Eager,选中 Join Columns
部分中的 Override Default,单击
Edit 按钮。
图-32
将 Name 域中的 job_JOB_ID
替换为 JOB_ID。单击 OK
之后,您应在 job 属性上方看到
@JoinColumn(name="JOB_ID", referencedColumnName =
"JOB_ID")
批注。这将修复上面提示的错误。保存
Job.java 文件。
图-33
右键单击 HRModel 项目并单击
JPA > Show in Entity
Editor,查看包含三个实体的已更新图表。
图-34
编辑 XML 配置文件
展开 HRModel 项目的 JPA
Content 文件夹,然后双击
persistence.xml。通过配置编辑器,您可以设置该文件的属性。选择
Connection 选项卡,输入 hr
作为数据源。
图-35
然后,按 Ctrl+S 保存包含以下内容的
persistence.xml 文件。
向导创建无状态会话 bean 和 servlet
来测试先前创建的实体。您还将了解如何在 WebLogic
上部署整个应用程序以及如何从 Eclipse 运行
servlet。
创建会话 Bean
单击 File > New >
Project...在 New Project
窗口中,展开 EJB 节点,选择 EJB
Project,然后单击 Next。
图-36
输入 HREJB 作为名称,保持
Oracle WebLogic Server v10.3
目标运行时不变,使用 3.0 EJB 版本和
Default Configuration for Oracle WebLogic Server
v10.3,选择 Add project to an EAR
复选框,选择 HRApp,然后单击
Next。
图-37
在以下屏幕中,保持默认选项不变,然后单击
Finish。
图-38
右键单击 HREJB 项目并单击 New
> Session Bean,输入
hr.ejb 作为 Package 名称,输入
HRBean 作为类名称,使用
Stateless 类型,保留接口的名称
hr.ejb.HRBeanLocal 不变,然后单击
Next。
图-39
不要修改以下屏幕中的默认设置,单击
Finish。
图-40
打开 HREJBClient 项目的
hr.ejb.HRBeanLocal
接口,添加以下方法。
您将收到编译错误:Employee cannot be resolved
to a type。要修复该错误,将鼠标移到
Employee 上,单击 Fix Project
Setup...
图-41
选择 Add project 'HRModel' to build path of
HREJBClient 并单击
OK,然后保存该文件。
图-42
返回 HRBean.java
文件,将鼠标移到类名称(应标有红色下划线)上,然后单击
Add unimplemented methods…
图-43
将鼠标移到 findEmployee() 方法的
Employee 返回类型上,单击 Fix
Project Setup...,选择 Add project 'HRModel' to
build path of HREJB,然后单击
OK。然后,在 HRBean
类的开头添加以下代码行:
将鼠标移到 @PersistenceContext
上,单击 Import 'PersistenceContext'
(javax.persistence)。将鼠标移到
EntityManager 上,单击 Import
'EntityManager' (javax.persistence)。接下来,将
return null; 替换为
findEmployee()
方法中的以下代码,并保存 HRBean
类。
保存文件之后,您应该在 Problems
视图中看到没有错误。以下是 HRBean
类的完整源代码。
创建测试 Servlet
单击 File > New >
Project...在 New Project
窗口中,展开 Web 节点,选择
Dynamic Web Project,然后单击
Next。
图-44
输入 HRTest 作为 Web
项目的名称,选择 Add project to an EAR
复选框,选择 HRApp,然后单击
Next。
图-45
在以下屏幕中,保持默认选项不变,然后单击
Finish。
图-46
右键单击 HRTest 项目并单击 New
> Servlet,输入 hr.test
作为 Package 名称,输入 HRServlet
作为类名称,然后单击 Finish。
图-47
在 HRServlet
类的开头添加以下两行代码。
将鼠标移到 @EJB 上,单击
Import 'EJB' (javax.ejb)。将鼠标移到
HRBeanLocal 上,单击 Fix Project
Setup...,选择 Add project 'HREJBClient' to
build path of HRTest,单击
OK,然后保存文件。然后,在
HRServlet 的 doGet()
方法中添加以下代码。
将鼠标移到 PrintWriter 上,单击
Import 'PrintWriter' (java.io)。将鼠标移到
Employee 上,单击 Fix Project
Setup...,选择 Add project 'HRModel' to build
path of HRTest,单击 OK,然后保存
HRServlet.java 文件。
展开 HRTest > Java Resources
> src >
hr.test,右键单击 HRServlet.java
并单击 Run As > Run on
Server,然后单击 Next。
图-48
查看部署的应用程序,然后单击
Finish。
图-49
您应该看到以下屏幕。
图-50
在 Eclipse 中 URL 的结尾添加
?emp=101,然后按 Enter
键。您将看到下面的屏幕。
图-51
for Eclipse (OEPE) 和 WebLogic 构建、部署和测试 Java EE
应用程序。我们主要讨论了 JPA
相关特性和向导,通过这些特性和向导,您可以从表或
Java
类中创建实体,然后在易于使用的编辑器和属性表中修改它们。
Andrei Cioroianu 是 Devsphere
的创始人,该公司主要提供 Java EE 开发和 Web 2.0/Ajax
咨询服务。他自 1997 年开始使用 Java 和 Web
技术,有着 10
多年的解决复杂技术问题和全程管理商业产品、定制应用程序和开源框架的专业经验。您可以通过
作者:Andrei Cioroianu
了解如何使用 Oracle Enterprise Pack for
Eclipse (OEPE) 的 Java 持久性 API (JPA) 构建 Java EE
应用程序,从而将对象映射到关系数据库。
Oracle Enterprise Pack for Eclipse (OEPE)
是一系列经认证的插件,用于开发可以从 Eclipse IDE
轻松部署到 Oracle WebLogic Server 上的 Java EE
应用程序。在本文中,您将了解如何使用 OEPE 的
Java 持久性 API (JPA) 编辑器和向导从现有表或 Java
类创建实体。您还将了解如何开发用于测试实体的会话
Bean 和 Servlet。所有这些组件都将打包到一个在
WebLogic Server 上运行的 Java EE
应用程序中。本文假设您已经安装了带有 OEPE
11g、Oracle WebLogic 10g 第 3 版和 Oracle
数据库 XE 的 Eclipse 3.4。
应用程序设置
在本部分中,您将了解如何在 Eclipse 中配置WebLogic,以便能够在代码中使用 Java EE API 并从 IDE
直接部署应用程序(如后文中所示)。您还将了解如何在
Eclipse 和 WebLogic 中设置数据源并使用 OEPE 11g
向导创建 JPA 项目。
在 Eclipse 中配置 Oracle WebLogic
Server
首先,确保已正确配置 WebLogic
域。要创建一个新域或查看现有域,单击
Start > Programs > Oracle
Fusion Middleware > WebLogic Server 10.3
> Tools > Configuration
Wizard。
图-1
在验证或创建 WebLogic 域之后,返回 Eclipse,单击
File > New >
Other...,选择 Server 并单击
Next。
图-2
输入服务器的主机名,选择 Oracle WebLogic
Server 10gR3 并单击
Next。
图-3
选择 WebLogic Home 并单击
Next。
图-4
选择 Server Type 和 Domain
Directory,然后单击 Finish。
图-5
要从 Eclipse 启动 WebLogic,转至 Servers
视图,右键单击 Oracle WebLogic Server 10gR3
并单击 Start。
从 Eclipse 和 WebLogic 连接到 Oracle
数据库
如果您刚刚安装 Oracle 数据库,则必须取消锁定
HR 用户,这样才可以访问 Oracle 数据库
XE 的示例模式。单击 Start > Programs
> Oracle Database 10g Express Edition
> Go To Database Home Page。使用安装
Oracle 数据库 XE 时提供的口令,以
SYSTEM 身份登录,单击
Administration > Database Users
> HR,输入 HR
用户的口令两次,选择 Unlocked 并单击
Alter User。
图-6
现在,您可以在 Eclipse 中配置数据库连接。单击
Window > Show View >
Other...,选择 Data Management >
Data Source Explorer 并单击
OK。右键单击 Database
Connections,单击 New,选择
Oracle Database Connection,输入连接名
hr,然后单击 Next。
图-7
选择 Oracle Database 10g Driver
Default,如果需要,则更改
jdbc:oracle:thin:@localhost:1521:xe URL
中的服务器名称,输入用户名 hr
及其口令,单击 Test Connection
验证所有内容都正确,然后单击
Finish。
图-8
右键单击 hr
模式,如果尚未连接,则单击
Connect,展开 hr > orcl
> Schemas,右键单击
HR,然后单击 Show in Schema
Viewer。
图-9
您还必须在 WebLogic 中配置 hr
数据源以便可以在应用程序中使用。在 Web
浏览器中打开
http://localhost:7001/console/,登录并单击
JDBC > Data Sources。单击
New,在 name 域中输入
hr,在 JNDI name 域中输入
hr,选择 Oracle
数据库类型,选择 Oracle's Driver (Thin)
Versions:9.0.1, 9.2.0, 10, 11,然后单击
Next。保留 Transaction Options
不变,单击 Next。输入数据库名称
xe、您的数据库主机名、端口号
1521、用户名
hr、口令,然后单击
Next。验证 URL(例如
jdbc:oracle:thin:@localhost:1521:xe),然后单击
Next。在最后一个屏幕中,选中
AdminServer 并单击
Finish。
重要事项! 在 WebLogic Server
Administration Console 中单击 Log
Out,以便从 Eclipse
中部署应用程序。如果您在 Eclipse
中看到以下错误,应转至 WebLogic
控制台并注销。
图-10
创建 JPA 项目
单击 File > New >
Project...在 New Project
窗口中,展开 JPA 节点并选择 JPA
Project。然后单击 Next。
图-11
输入 HRModel 作为名称,保持
Oracle WebLogic Server v10.3
目标运行时不变,使用 Utility JPA project with
Java 5.0 配置,选择 Add project to an
EAR 复选框,在 EAR Project Name
的文本域中输入 HRApp,然后单击
Next。
图-12
默认的 JPA 平台为
Generic,这意味着您仅能使用标准的 JPA
1.0 功能。如果要使用将添加到 JPA 2.0
的特性或希望配置特定于 EclipseLink JPA
实施的属性,如 Persistence Unit
Customization、Caching、Logging、Session Options 和 Schema
Generation,选择 EclipseLink 平台。选择
hr 连接,保留其余设置不变并单击
Finish。
图-13
当询问您是否要打开 JPA 透视图时,单击
Yes。
图-14
创建并修改实体
在本部分中,您将学习如何从现有表或 Java类生成 JPA 实体、如何在 JPA Entity Editor
中查看其关联、如何在 JPA Structure 和 JPA Details
视图中修改您的实体以及如何使用 JPA
配置编辑器。OEPE 11g 提供了以上所有向导。
从表创建实体
接下来,您将从 HR 模式的
DEPARTMENTS 和 EMPLOYEES
表生成两个实体类。下面包括了这些表的 CREATE
语句。由于表已经存在,您不必运行这些语句。注意看一下外键,因为我们将在后文中对其进行讨论。
CREATE TABLE "DEPARTMENTS" ("DEPARTMENT_ID" NUMBER(4,0), "DEPARTMENT_NAME" VARCHAR2(30) CONSTRAINT "DEPT_NAME_NN" NOT NULL ENABLE, "MANAGER_ID" NUMBER(6,0), "LOCATION_ID" NUMBER(4,0), CONSTRAINT "DEPT_ID_PK" PRIMARY KEY ("DEPARTMENT_ID") ENABLE, CONSTRAINT "DEPT_LOC_FK" FOREIGN KEY ("LOCATION_ID") REFERENCES "LOCATIONS" ("LOCATION_ID") ENABLE, CONSTRAINT "DEPT_MGR_FK" FOREIGN KEY ("MANAGER_ID") REFERENCES "EMPLOYEES" ("EMPLOYEE_ID") ENABLE ) CREATE TABLE "EMPLOYEES" ("EMPLOYEE_ID" NUMBER(6,0), "FIRST_NAME" VARCHAR2(20), "LAST_NAME" VARCHAR2(25) CONSTRAINT "EMP_LAST_NAME_NN" NOT NULL ENABLE, "EMAIL" VARCHAR2(25) CONSTRAINT "EMP_EMAIL_NN" NOT NULL ENABLE, "PHONE_NUMBER" VARCHAR2(20), "HIRE_DATE" DATE CONSTRAINT "EMP_HIRE_DATE_NN" NOT NULL ENABLE, "JOB_ID" VARCHAR2(10) CONSTRAINT "EMP_JOB_NN" NOT NULL ENABLE, "SALARY" NUMBER(8,2), "COMMISSION_PCT" NUMBER(2,2), "MANAGER_ID" NUMBER(6,0), "DEPARTMENT_ID" NUMBER(4,0), CONSTRAINT "EMP_SALARY_MIN" CHECK (salary > 0) ENABLE, CONSTRAINT "EMP_EMAIL_UK" UNIQUE ("EMAIL") ENABLE, CONSTRAINT "EMP_EMP_ID_PK" PRIMARY KEY ("EMPLOYEE_ID") ENABLE, CONSTRAINT "EMP_DEPT_FK" FOREIGN KEY ("DEPARTMENT_ID") REFERENCES "DEPARTMENTS" ("DEPARTMENT_ID") ENABLE, CONSTRAINT "EMP_JOB_FK" FOREIGN KEY ("JOB_ID") REFERENCES "JOBS" ("JOB_ID") ENABLE, CONSTRAINT "EMP_MANAGER_FK" FOREIGN KEY ("MANAGER_ID") REFERENCES "EMPLOYEES" ("EMPLOYEE_ID") ENABLE ) |
项目,单击 JPA > Generate Custom JPA
Entities...,确保已选择 hr
连接,然后单击 Connect
图标(如果该图标处于启用状态。如果您已经连接,则该按钮处于禁用状态。)选择
DEPARTMENTS 和 EMPLOYEES
表,然后单击 Next。
图-15
在实际的应用程序中,通常,您将生成该模式的所有表的实体。但是出于学习目的,表越少越简单。JPA
向导将分析外键,为该示例所选的两个表提出三个表关联建议。
图-16
在大多数情况下,仅凭该模式所包含的信息,向导还不足以确定您到底需要什么。因此,您通常需要编辑关联。单击第一个关联,位于
DEPARTMENTS 和 EMPLOYEES
之间。将 employee 属性重命名为
manager,然后取消选中 Generate a
reference to a collection of DEPARTMENTS in
EMPLOYEES。
图-17
单击第二个关联,使每个部门与其员工相对应。此处未作更改。
图-18
单击第三个关联,使每个员工与其主管相对应。该信息也可通过前面的关联获得。因此,第三个关联是多余的,可以删除。取消选中
Generate this association 并单击
Next。
图-19
使用以下屏幕中的默认选项,输入
hr.model 作为 Package 名称,然后单击
Next。
图-20
通过最后一个屏幕,您可以更改实体名称及其属性的名称和类型。在本例中,不必进行更改。单击
Finish 生成 Java 类型。
图-21
右键单击 HRModel 项目并单击
JPA > Show in Entity
Editor,查看包含您刚刚创建的实体及其之间关系的图表。
图-22
以下是向导针对 Department
实体生成的源代码:
package hr.model; import java.io.Serializable; import javax.persistence.*; @Entity() @Table(name="DEPARTMENTS") public class Department implements Serializable { private static final long serialVersionUID = 1L; @Id() @Column(name="DEPARTMENT_ID") private long departmentId; @Column(name="DEPARTMENT_NAME") private String departmentName; @Column(name="LOCATION_ID") private java.math.BigDecimal locationId; //uni-directional many-to-one association to Employee @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="MANAGER_ID", referencedColumnName="EMPLOYEE_ID") private Employee manager; //bi-directional many-to-one association to Employee @OneToMany(mappedBy="department", fetch=FetchType.EAGER) private java.util.Set<Employee> employees; public Department() { } public long getDepartmentId() { return this.departmentId; } public void setDepartmentId(long departmentId) { this.departmentId = departmentId; } ... public Employee getManager() { return this.manager; } public void setManager(Employee manager) { this.manager = manager; } public java.util.Set<Employee> getEmployees() { return this.employees; } public void setEmployees(java.util.Set<Employee> employees) { this.employees = employees; } } |
package hr.model; import java.io.Serializable; import javax.persistence.*; @Entity() @Table(name="EMPLOYEES") public class Employee implements Serializable { private static final long serialVersionUID = 1L; @Id() @Column(name="EMPLOYEE_ID") private long employeeId; @Column(name="FIRST_NAME") private String firstName; @Column(name="LAST_NAME") private String lastName; private String email; @Column(name="PHONE_NUMBER") private String phoneNumber; @Column(name="HIRE_DATE") private java.sql.Date hireDate; @Column(name="JOB_ID") private String jobId; private java.math.BigDecimal salary; @Column(name="COMMISSION_PCT") private java.math.BigDecimal commissionPct; //bi-directional many-to-one association to Department @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(name="DEPARTMENT_ID", referencedColumnName="DEPARTMENT_ID") private Department department; public Employee() { } public long getEmployeeId() { return this.employeeId; } public void setEmployeeId(long employeeId) { this.employeeId = employeeId; } ... public Department getDepartment() { return this.department; } public void setDepartment(Department department) { this.department = department; } } |
JPA
向导能够建议关联。但是,有时外键不是由模式显式定义的,您没有权限更改表以添加外键。在这种情况下,您仍然可以使用向导定义表关联。
重要事项!如果模式包含外键,您不必按照该部分其余步骤操作。
假设 HR
示例模式没有外键。在这种情况下,Generate
Custom Entities 向导的 Table
Associations
列表将为空,如以下屏幕所示。
图-23
要添加关联,您可以单击 + (New
Association) 按钮启动 Create New
Association 子向导。例如,如果要在此处使用
DEPARTMENT_ID 列定义 EMPLOYEES
和 DEPARTMENTS
之间的关系,按以下屏幕所示选择这两个表并单击
Next。
图-24
然后,单击 Add,选择两个表的
DEPARTMENT_ID 列,然后单击
Next。
图-25
在子向导的 Association Cardinality
屏幕中,选择 Many to one 并单击
Finish。
图-26
之后,可以在主向导中查看该关联。
图-27
总之,通过 Generate Custom Entities
向导,您可以修改建议的关联并将模式中未指定的新关联添加为外键。该方法可以在创建实体时使用。稍后在本文中您将看到,在创建实体后也可以使用
JPA Structure 和 JPA Details
视图定义和修改关联。
从 Java 类创建实体
本文的示例应用程序借助现有数据库启动,该数据库用于生成实体。也可以首先创建
Java 类,然后使用 JPA > Generate
DDL...
创建表。第三种方法是将现有类映射到现有表。在本部分中,我们将从
Java 类构建一个新实体,该类将映射到
JOBS 表,其 CREATE 语句如下所示:
CREATE TABLE "JOBS" ("JOB_ID" VARCHAR2(10), "JOB_TITLE" VARCHAR2(35) CONSTRAINT "JOB_TITLE_NN" NOT NULL ENABLE, "MIN_SALARY" NUMBER(6,0), "MAX_SALARY" NUMBER(6,0), CONSTRAINT "JOB_ID_PK" PRIMARY KEY ("JOB_ID") ENABLE ) |
Job,并粘贴以下代码:
package hr.model; import java.io.Serializable; import java.math.BigDecimal; public class Job implements Serializable { private static final long serialVersionUID = 1L; private String jobId; private String jobTitle; private BigDecimal minSalary; private BigDecimal maxSalary; public Job() { super(); } public String getJobId() { return this.jobId; } public void setJobId(String jobId) { this.jobId = jobId; } public String getJobTitle() { return this.jobTitle; } public void setJobTitle(String jobTitle) { this.jobTitle = jobTitle; } public BigDecimal getMinSalary() { return this.minSalary; } public void setMinSalary(BigDecimal minSalary) { this.minSalary = minSalary; } public BigDecimal getMaxSalary() { return this.maxSalary; } public void setMaxSalary(BigDecimal maxSalary) { this.maxSalary = maxSalary; } } |
JPA > Generate Entity from Java
Class...单击 Browse 图标,选择
hr.model.Job 类,然后单击
Next。
图-28
确保选择了 hr 连接和
HR 模式,选择 JOBS
表,保留 Primary key property 的
jobId 选择,然后单击
Next。
图-29
验证属性已正确映射到 JOBS
表的列,然后单击 Finish。
图-30
该向导将向 Job
类中添加以下批注。
@Entity() @Table(name="JOBS", schema="HR") public class Job implements Serializable { private static final long serialVersionUID = 1L; @Id() @Column(name="JOB_ID", unique=true, nullable=false, length=10) private String jobId; @Basic() @Column(name="JOB_TITLE", nullable=false, length=35) private String jobTitle; @Basic() @Column(name="MIN_SALARY", precision=10) private BigDecimal minSalary; @Basic() @Column(name="MAX_SALARY", precision=10) private BigDecimal maxSalary; ... } |
Details
打开 Employee 实体,将 String
jobId 字段替换为 Job
job。还需要删除
@Column(name="JOB_ID") 批注,将
getJobId() 和 setJobId()
方法替换为 getJob() 和
setJob()。
public class Employee implements Serializable { ... private Job job; ... public Job getJob() { return this.job; } public void setJob(Job job) { this.job = job; } ... } |
resolved。转至右上角的 JPA
Structure 视图,右键单击 job
并单击 Map As > Many to
One。向导将添加 @ManyToOne
批注。
图-31
您应该在右下角看到 JPA Detail
视图。验证 job 属性仍然正确,在
Fetch 列表中选择
Eager,选中 Join Columns
部分中的 Override Default,单击
Edit 按钮。
图-32
将 Name 域中的 job_JOB_ID
替换为 JOB_ID。单击 OK
之后,您应在 job 属性上方看到
@JoinColumn(name="JOB_ID", referencedColumnName =
"JOB_ID")
批注。这将修复上面提示的错误。保存
Job.java 文件。
图-33
右键单击 HRModel 项目并单击
JPA > Show in Entity
Editor,查看包含三个实体的已更新图表。
图-34
编辑 XML 配置文件
展开 HRModel 项目的 JPA
Content 文件夹,然后双击
persistence.xml。通过配置编辑器,您可以设置该文件的属性。选择
Connection 选项卡,输入 hr
作为数据源。
图-35
然后,按 Ctrl+S 保存包含以下内容的
persistence.xml 文件。
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence ..."> <persistence-unit name="HRModel"> <jta-data-source>hr</jta-data-source> <class>hr.model.Department</class> <class>hr.model.Employee</class> <class>hr.model.Job</class> </persistence-unit> </persistence> |
测试实体
在本部分中,您将使用更多的 OEPE 11g向导创建无状态会话 bean 和 servlet
来测试先前创建的实体。您还将了解如何在 WebLogic
上部署整个应用程序以及如何从 Eclipse 运行
servlet。
创建会话 Bean
单击 File > New >
Project...在 New Project
窗口中,展开 EJB 节点,选择 EJB
Project,然后单击 Next。
图-36
输入 HREJB 作为名称,保持
Oracle WebLogic Server v10.3
目标运行时不变,使用 3.0 EJB 版本和
Default Configuration for Oracle WebLogic Server
v10.3,选择 Add project to an EAR
复选框,选择 HRApp,然后单击
Next。
图-37
在以下屏幕中,保持默认选项不变,然后单击
Finish。
图-38
右键单击 HREJB 项目并单击 New
> Session Bean,输入
hr.ejb 作为 Package 名称,输入
HRBean 作为类名称,使用
Stateless 类型,保留接口的名称
hr.ejb.HRBeanLocal 不变,然后单击
Next。
图-39
不要修改以下屏幕中的默认设置,单击
Finish。
图-40
打开 HREJBClient 项目的
hr.ejb.HRBeanLocal
接口,添加以下方法。
public Employee findEmployee(Integer empId); |
to a type。要修复该错误,将鼠标移到
Employee 上,单击 Fix Project
Setup...
图-41
选择 Add project 'HRModel' to build path of
HREJBClient 并单击
OK,然后保存该文件。
图-42
返回 HRBean.java
文件,将鼠标移到类名称(应标有红色下划线)上,然后单击
Add unimplemented methods…
图-43
将鼠标移到 findEmployee() 方法的
Employee 返回类型上,单击 Fix
Project Setup...,选择 Add project 'HRModel' to
build path of HREJB,然后单击
OK。然后,在 HRBean
类的开头添加以下代码行:
@PersistenceContext private EntityManager em; |
上,单击 Import 'PersistenceContext'
(javax.persistence)。将鼠标移到
EntityManager 上,单击 Import
'EntityManager' (javax.persistence)。接下来,将
return null; 替换为
findEmployee()
方法中的以下代码,并保存 HRBean
类。
return em.find(Employee.class, empId); |
视图中看到没有错误。以下是 HRBean
类的完整源代码。
package hr.ejb; import hr.model.Employee; import javax.ejb.Stateless; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; @Stateless public class HRBean implements HRBeanLocal { @PersistenceContext private EntityManager em; public HRBean() { // TODO Auto-generated constructor stub } @Override public Employee findEmployee(Integer empId) { return em.find(Employee.class, empId); } } |
单击 File > New >
Project...在 New Project
窗口中,展开 Web 节点,选择
Dynamic Web Project,然后单击
Next。
图-44
输入 HRTest 作为 Web
项目的名称,选择 Add project to an EAR
复选框,选择 HRApp,然后单击
Next。
图-45
在以下屏幕中,保持默认选项不变,然后单击
Finish。
图-46
右键单击 HRTest 项目并单击 New
> Servlet,输入 hr.test
作为 Package 名称,输入 HRServlet
作为类名称,然后单击 Finish。
图-47
在 HRServlet
类的开头添加以下两行代码。
@EJB(name="HRBean") private HRBeanLocal hrBean; |
Import 'EJB' (javax.ejb)。将鼠标移到
HRBeanLocal 上,单击 Fix Project
Setup...,选择 Add project 'HREJBClient' to
build path of HRTest,单击
OK,然后保存文件。然后,在
HRServlet 的 doGet()
方法中添加以下代码。
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); int empId = 100; String empParam = request.getParameter("emp"); if (empParam != null) empId = Integer.parseInt(empParam); PrintWriter out = response.getWriter(); Employee emp = hrBean.findEmployee(empId); out.println("" + empId + ": " + emp.getFirstName() + " " + emp.getLastName()); out.println("working in " + emp.getDepartment().getDepartmentName() + " department"); out.println("as " + emp.getJob().getJobTitle()); out.println("has " + (emp.getDepartment().getEmployees().size()-1) + " colleagues"); } |
Import 'PrintWriter' (java.io)。将鼠标移到
Employee 上,单击 Fix Project
Setup...,选择 Add project 'HRModel' to build
path of HRTest,单击 OK,然后保存
HRServlet.java 文件。
展开 HRTest > Java Resources
> src >
hr.test,右键单击 HRServlet.java
并单击 Run As > Run on
Server,然后单击 Next。
图-48
查看部署的应用程序,然后单击
Finish。
图-49
您应该看到以下屏幕。
图-50
在 Eclipse 中 URL 的结尾添加
?emp=101,然后按 Enter
键。您将看到下面的屏幕。
图-51
总结
在本文中,您了解了如何使用 Oracle Enterprise Packfor Eclipse (OEPE) 和 WebLogic 构建、部署和测试 Java EE
应用程序。我们主要讨论了 JPA
相关特性和向导,通过这些特性和向导,您可以从表或
Java
类中创建实体,然后在易于使用的编辑器和属性表中修改它们。
Andrei Cioroianu 是 Devsphere
的创始人,该公司主要提供 Java EE 开发和 Web 2.0/Ajax
咨询服务。他自 1997 年开始使用 Java 和 Web
技术,有着 10
多年的解决复杂技术问题和全程管理商业产品、定制应用程序和开源框架的专业经验。您可以通过
相关文章推荐
- Notes for Oracle Database PSU/CP…
- oracle 11.2.0.3 for&nb…
- Java EE V7.0学习笔记-Oracle Enterprise Pack for Eclipse (OEPE) 12.2.1下载就可以使用
- 使用 Oracle Enterprise Pack for Eclipse (OEPE) 开发 Oracle ADF 应用程序
- 使用 Oracle Enterprise Pack for Eclipse (OEPE) 开发 Oracle ADF 应用程序
- Eclipse 安装 Oracle Enterprise Pack for Eclipse Kepler 增加对 Oracle 产品的支持
- Toad for Oracle工具的使用
- Oracle Enterprise Pack for Eclipse 11g
- eclipse ee 装oepe(Oracle Enterprise Pack for Eclipse)插件
- Oracle Enterprise Pack for Eclipse 中的 Web 服务支持
- LINUX&nbsp;AS4&nbsp;系统下安装oracle&nbsp;10g终…
- 客户端连接Linux&nbsp;虚拟机下的Oracle
- sublime在mac环境下安装 Pack…
- Oracle&nbsp;进程类别
- Oracle&nbsp;本地表空间管理与字典…
- wps&nbsp;for&nbsp;linux64位版文…
- 使用oracle 的闪回功能
- An API for interacting with Star…
- oracle 11g for redhat 64
- oracle 11g 新参数 MEMORY_TARGET