开发环境:NetBeans 7.1。
我在《开发JavaEE 6 应用之十四:使用CDI Event实现观察者模式》基础上使用JPA实现多主键映射。
1. 创建多主键表:COMPOSITE_CUSTOMER
打开项目JavaEE6SampleApp,切换到服务Tab,选择数据库节点,右键 jdbc:derby://localhost:1527/sample [Appshang的app],选择连接。
在SQL窗口输入:
2. 创建多主键表:COMPOSITE_CUSTOMER
具体步骤与《开发JavaEE 6 应用之三:创建JPA实体》类似。
不过,完成后,会生成两个Java文件:
2.1 多主键类:CompositeCustomerPK.java
多主键类要求:
(1)要有无参构造方法。
(2)要实现序列化接口
(3)Override hashCode方法和equals方法
其中,类标注@Embeddable表明该类不是一个实体,而是嵌入别的实体中的一个属性。
2.2 JPA实体类:CompositeCustomer.java
3. 修改CustomerSessionBean,增加addCompositeCustomer方法
4. 修改TestServlet,增加addcc操作处理
5. 运行TestServlet
在TestServlet后面增加参数:http://localhost:8080/JavaEE6SampleApp/TestServlet?addcc=100
检查数据库,发现COMPOSITE_CUSTOMER表中增加了新的数据。

Project下载:JavaEE6SampleApp(CompositeKey).7z
参考文献:
1. http://stackoverflow.com/questions/4705088/jpa-2-multiple-column-usage-in-foreign-keys
2. http://weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.html
3. http://jerval.iteye.com/blog/875826
4. http://melin.iteye.com/blog/197217
我在《开发JavaEE 6 应用之十四:使用CDI Event实现观察者模式》基础上使用JPA实现多主键映射。
1. 创建多主键表:COMPOSITE_CUSTOMER
打开项目JavaEE6SampleApp,切换到服务Tab,选择数据库节点,右键 jdbc:derby://localhost:1527/sample [Appshang的app],选择连接。
在SQL窗口输入:
DROP TABLE COMPOSITE_CUSTOMER;
CREATE TABLE COMPOSITE_CUSTOMER
(
FIRST_NAME VARCHAR(10),
LAST_NAME VARCHAR(10),
Mobile_Phone int,
ADDRESS VARCHAR(100),
CONSTRAINT COMPOSITE_CUSTOMER_PK PRIMARY KEY
(
FIRST_NAME, LAST_NAME
)
)
2. 创建多主键表:COMPOSITE_CUSTOMER
具体步骤与《开发JavaEE 6 应用之三:创建JPA实体》类似。
不过,完成后,会生成两个Java文件:
2.1 多主键类:CompositeCustomerPK.java
多主键类要求:
(1)要有无参构造方法。
(2)要实现序列化接口
(3)Override hashCode方法和equals方法
其中,类标注@Embeddable表明该类不是一个实体,而是嵌入别的实体中的一个属性。
2.2 JPA实体类:CompositeCustomer.java
3. 修改CustomerSessionBean,增加addCompositeCustomer方法
public void addCompositeCustomer(String firstName,
String lastName, Integer mobilePhone, String address) {
CompositeCustomer cc = new CompositeCustomer(firstName, lastName);
cc.setMobilePhone(1234567890);
cc.setAddress(address);
em.persist(cc);
}
4. 修改TestServlet,增加addcc操作处理
String ccid = request.getParameter("addcc");
if (ccid != null) {
bean.addCompositeCustomer("Ping" + ccid, "Ma" + ccid, 1234567890, "China Beijing");
...
}
5. 运行TestServlet
在TestServlet后面增加参数:http://localhost:8080/JavaEE6SampleApp/TestServlet?addcc=100
检查数据库,发现COMPOSITE_CUSTOMER表中增加了新的数据。
Project下载:JavaEE6SampleApp(CompositeKey).7z
参考文献:
1. http://stackoverflow.com/questions/4705088/jpa-2-multiple-column-usage-in-foreign-keys
2. http://weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.html
3. http://jerval.iteye.com/blog/875826
4. http://melin.iteye.com/blog/197217
没有评论:
发表评论