此处仅简单通过JPA插入一对关系数据进行了解JPA的使用。对于一对多关系,从Object角度将,关系可能维护在多的一方,也可能维护在一的一方;从DBTable的角度将,则是多的一方维护着关系。而ORM工具为的是屏蔽对底层DB依赖,只需要学会使用JPA或HIBERNATE的API及相关知识就可以很方便的操作了。
JPA是java规范,使用JPA离不开下面几个常用类。
javax.persistence.Persistence; javax.persistence.EntityManagerFactory; javax.persistence.EntityManager; javax.persistence.Query;
假设任务信息TItem和历史信息THist是一对多关系。假设一种场景需要存储多条任务信息,而且每种任务信息会携带多个相同的历史信息,此种情景可以简化理解为多次存储一对多关系(简单对比一下此种场景的如下说法:每种任务信息携带多个历史信息、每种任务信息携带多个不同的历史信息)。假设docIdList中携带任务信息相关内容,FormInfoList中携带历史信息相关内容。
//持久信息 EntityManagerFactory emf = Persistence.createEntityManagerFactory("your_unit"); EntityManager emMy = emf.createEntityManager(); try{ emMy.getTransaction().begin(); for(String docId:docIdList){ /** * 设置任务 */ tItem = new TItem(); //设置ID tItem.setDocId(docId); //设置日期 tItem.setDispDate(new Timestamp(System.currentTimeMillis())); //保存一 emMy.persist(tItem); //创建保存履历表,同时关联任务 for(String disDTO: FormInfoList){ /** * 设置履历表各项信息 */ tHist = new THist(); …… tHist.setTItem(tItem); //保存多 emMy.persist(tDispHist); } //提交 emMy.getTransaction().commit(); }catch(Exception e){ e.printStackTrace(); em.getTransaction().rollback(); }finally{ if(emMy.isOpen()){ emMy.close(); } }
此文,没有讲解JPA相关的配置(像Persistence.createEntityManagerFactory("your_unit");中的“your_unit就是JPA的Persistence.xml文件配置中的信息”),仅仅通过一个实例简单说明JPA在插入数据上的用法,而更为重要的是分析和思考JPA等ORM工具在不同场景中是如何发挥作用的,其原理是什么!