博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jpa 多对多关系的实现注解形式
阅读量:4928 次
发布时间:2019-06-11

本文共 7019 字,大约阅读时间需要 23 分钟。

 

1, 表结构

  1)设备表 VTM_DEVICE_INFO

create table VTM_DEVICE_INFO(  ID                 INTEGER not null,  SN                 VARCHAR2(32) not null,  STATUS             INTEGER,  MEMO               VARCHAR2(256),  DEVICE_NO          INTEGER,  START_TIME         TIMESTAMP(6),  END_TIME           TIMESTAMP(6),  FACTORY            INTEGER,  DEVICE_IN_DATE     TIMESTAMP(6),  ISAFEDOOR_POSITION INTEGER,  AUDIT_FLAG         VARCHAR2(1));alter table VTM_DEVICE_INFO  add constraint PK_VTM_DEVICE_INFO primary key (ID);

  2)模块表 VTM_MODULE_DEFINE

create table VTM_MODULE_DEFINE(  ID          INTEGER not null,  MODULE_NAME VARCHAR2(50) not null);alter table VTM_MODULE_DEFINE  add constraint PK_VTM_MODULE_DEFINE primary key (ID);

  3)设备模块关系表 VTM_DEVICE_MODULE

create table VTM_DEVICE_MODULE(  DEVICE_ID INTEGER not null,  MODULE_ID INTEGER not null);alter table VTM_DEVICE_MODULE  add constraint FK_VTM_DEVI_REF_DEVIC_VTM_DEVI foreign key (DEVICE_ID)  references VTM_DEVICE_INFO (ID);alter table VTM_DEVICE_MODULE  add constraint FK_VTM_DEVI_REF_DEVIC_VTM_MODU foreign key (MODULE_ID)  references VTM_MODULE_DEFINE (ID);

  4)初始化模块表数据

insert into VTM_MODULE_DEFINE (ID, MODULE_NAME) values (1, '读卡器');insert into VTM_MODULE_DEFINE (ID, MODULE_NAME) values (2, '密码键盘');insert into VTM_MODULE_DEFINE (ID, MODULE_NAME) values (3, '取款模块');insert into VTM_MODULE_DEFINE (ID, MODULE_NAME) values (4, '存款模块');

  5)数据库中要到的序列

create sequence DEVICE_INFO_SEQminvalue 1maxvalue 9999999999start with 101increment by 1cache 20;create sequence DEVICE_MODULE_SEQminvalue 1maxvalue 9999999999start with 1increment by 1cache 20;

  设备表 与 模块表 之间是多对多的关系,关系表为 设备模块表

2,实体类采用注解的形式,体现他们之间的关系

package opstools.vtm.device.entity;import java.io.Serializable;import java.util.Date;import java.util.Set;import javax.persistence.CascadeType;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.ManyToOne;import javax.persistence.SequenceGenerator;import javax.persistence.Table;import javax.persistence.Temporal;import javax.persistence.TemporalType;/** * 设备实体类 * @author yangw */@Entity@Table(name = "VTM_DEVICE_INFO")@SequenceGenerator(name = "deviceInfoSeq", sequenceName = "DEVICE_INFO_SEQ")public class DeviceInfo implements Serializable {    private static final long serialVersionUID = -6964820074623402896L;    @Id    @Column(name="ID")    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "deviceInfoSeq")    private Integer deviceId;          //设备Id        @Column    private String sn;                 //序号    @Column    private Integer status;          //设备使用状态        @Column    private Integer branchId;        @Column    private String memo;             //备注信息    @Column    private Integer deviceNo;        //设备型号    @Temporal(TemporalType.TIMESTAMP)    @Column    private Date startTime;         //开始使用时间    @Temporal(TemporalType.TIMESTAMP)    @Column    private Date endTime;            //设备终止时间    @Column    private Integer factory;        //设备厂商    @Temporal(TemporalType.TIMESTAMP)    @Column    private Date deviceInDate;        //设备增加时间    @Column    private Integer isafedoorPosition;    //开门方向    @Column    private Integer auditFlag;        //审核标志    @ManyToMany(cascade=CascadeType.PERSIST)         @JoinTable(name = "VTM_DEVICE_MODULE", joinColumns = {@JoinColumn(name = "deviceId")},inverseJoinColumns=@JoinColumn(name="MODULE_ID"))    private Set
moduleDefine; //get set 省略}
package opstools.vtm.device.entity;import java.io.Serializable;import java.util.Set;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.JoinColumn;import javax.persistence.JoinTable;import javax.persistence.ManyToMany;import javax.persistence.SequenceGenerator;import javax.persistence.Table;/** * 设备模块表 * @author yangw */@Entity@Table(name = "VTM_MODULE_DEFINE")@SequenceGenerator(name = "moduleDefineSeq", sequenceName = "MODULE_DEFINE_SEQ")public class ModuleDefine implements Serializable {    private static final long serialVersionUID = 1L;    @Id    @Column(name="ID")    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "moduleDefineSeq")    private Integer moduleId;          //模块Id        @Column    private String moduleName;         //模块名称    @ManyToMany(mappedBy = "moduleDefine")      private Set
deviceInfo; //省略 get set 这个类可能不需要再写@ManyToMany来维护关系,因为这个表的数据是初始化好的,不需要修改, 具体没有测试. }

3, dao层的实现,就是将 设备添加到数据库

@Override    public void createDeviceInfo(DeviceInfo deviceInfo) {        super.create(deviceInfo);        }

4,service层的实现,将模块信息设置到设备类的属性中.

@Override    public void createDeviceInfo(DeviceInfo deviceInfo, Integer[] moduleIds) {        if(moduleIds!=null){                        Set
defineSet=deviceInfo.getModuleDefine(); if(defineSet==null){ defineSet=new HashSet
(); } for(int i=0;i

5,action层的简单实现

@Override    public void submitPage(String pageName) throws Exception {                deviceInfo.setStartTime(DateSupportUtils.str2second(startTime));        deviceInfo.setEndTime(DateSupportUtils.str2second(endTime));                if(pageName.equals(PAGE_CREATE)){            deviceInfo.setDeviceInDate(new Date());            deviceInfoService.createDeviceInfo(deviceInfo,moduleIds);        }        else if(pageName.equals(PAGE_UPDATE)){            deviceInfoService.updateDeviceInfo(deviceInfo);        }    }

6,界面jsp页面,简单给大家看看.

<%@ page language="java" pageEncoding="UTF-8"%><%@ taglib prefix="s" uri="/struts-tags" %>             ${pageTitle}        
${pageTitle}
//下面一种标签只列出来了一个
开始使用时间:
" class="Wdate" οnfοcus="WdatePicker({isShowClear:false,dateFmt:'yyyy-MM-dd HH:mm:ss',readOnly:true})"/>
设备厂商:
模块:
备注信息:
提交
关闭

 

转载于:https://www.cnblogs.com/yangw/p/3644700.html

你可能感兴趣的文章
2015年蓝桥杯省赛A组c++第1题
查看>>
解决CentOS缺少共享库
查看>>
写在人生的路上——2016年上半年总结
查看>>
hat linux下vnc的安装
查看>>
Perl Nmap处理脚本
查看>>
[BZOJ4668]冷战(并查集)
查看>>
ajax提交表单+前端验证小示例
查看>>
JQery 中的 $(".bb:eq(1)") eq () 解释。。
查看>>
实验 1-1
查看>>
delphi 接口Interface
查看>>
弹性盒模型display:flex
查看>>
应用层常用协议
查看>>
iOS 7 UI 过渡指南 - 開始之前(iOS 7 UI Transition Guide - Before You Start)
查看>>
POJ2155:Matrix(二维树状数组,经典)
查看>>
JDK5什么是新的堵塞队列线程(四)
查看>>
怎样基于android4.4.2的源代码和android-4.3.1_r1的驱动编译I9250的ROM
查看>>
TCP和UDP协议的应用/参数查看
查看>>
要看的
查看>>
[翻译]ASP.NET MVC 3 开发的20个秘诀(四)[20 Recipes for Programming MVC 3]:实现多语言支持...
查看>>
centos6.5下,使用虚拟ftp用户
查看>>