《2022年spring+jpa框架搭建 .pdf》由会员分享,可在线阅读,更多相关《2022年spring+jpa框架搭建 .pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Hibernate 的作者目前在为EJB工作,EJB的实体 BEAN刚好被 JPA所代替。JPA的思想和Hibernate 中的思想极为相似,将普通Hibernate 升级为满足JPA规范的 ORM 也是非常方便的。使用 JPA的好处在于:JPA致力于建立ORM 的行业标准,大有一统天下的野心,况且也是 SUM公司的项目。将代码符合JPA规范,有利于移植到其它实现了JPA规范的 ORM 框架。在大型项目中与EJB配合,可以部署在分布式的应用中。Hibernate 使用 JPA的步骤:1、将繁琐的映射xml 文件由 JAVA注释代替。比如将 User 和 Organization 的映射 xml
2、 转换为注释(User 和 Role的多对多关系不考虑):User.hbm.xml 内容如下:Organization.hbm.xml 内容如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 7 页 -改成注释形式如下:User 类:EntityTable(name=user010t)publicclass User IdGeneratedValue(strategy=GenerationType.IDENTITY)private Long id;Column(name=userID,unique=true,nullable=false)private String userI
3、D;Column(name=username,unique=false,nullable=false)private String username;Column(name=password,unique=false,nullable=false)private String password;名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 7 页 -ManyToOne(cascade=CascadeType.PERSIST,CascadeType.MERGE)JoinColumn(name=OrganizationID)private Organization organiza
4、tion;一系列的setter和 getter省略 Organization类如下:EntityTable(name=organization010t)publicclassOrganization IdGeneratedValue(strategy=GenerationType.IDENTITY)private Long id;Column(name=name,unique=false,nullable=false)private String name;OneToMany(mappedBy=organization,fetch=FetchType.LAZY)private Setusers
5、;部分成员变量以及一系列的setter和 getter省略 懂 XML 配置的话,这些注释应该很明白意思,不过多解释。不过有一点值得说明,inverse属性在注释中是没有的,它是默认为true 的,参考的对象则是相对于mappedBy 指定的对象。然后就可以将以前的映射xml 文件删除了。2、在 class文件夹下建立/META-INF/persistence.xml 文件,进行JPA的相关配置内容如下:org.hibernate.ejb.HibernatePersistence名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 7 页 -com.wu.myApplication.d
6、omain.Usercom.wu.myApplication.domain.Organization其他省略如果这里没有使用spring 的话,可以把数据库连接的相应信息配置进来。因为这里使用了spring 管理,所以配置在spring 中了。如果以后做分布式数据库,那么可以配置多个persistence-unit属性。transaction-type=RESOURCE_LOCAL支持 JTA事务管理和RESOURCE_LOCAL事务管理。如果用了EJB容器,如果做分布式应用的话,好像事务管理只能用JTA。这点不是太清楚,没有做过。class属性配置需要映射的类3、修改 application
7、Context.xml 内容如下:名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 7 页 -com.microsoft.sqlserver.jdbc.SQLServerDriver!-jdbc:sqlserver:/localhost:1433;DatabaseName=hbSystem-jdbc:sqlserver:/localhost:1433;SelectMethod=cursor;DatabaseName=myApplicationsa 1988125352!-名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 7 页 -其他省略 数据源的配置不变,Sessio
8、nFactory换成了LocalContainerEntityManagerFactoryBean而且必须注入HibernateJpaVendorAdapter不然在事务管理service 层的时候不起作用。采用注释的方式声明事务管理,在需要事务管理的方法前加注释,如下:TestTransactional(propagation=Propagation.REQUIRED,rollbackFor=Exception.class)publicvoiduserOrganizationSaveTest()名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 7 页 -方法内容省略注释中的 Propagation.REQUIRED 表示如果transactionManager没有开启事务则新建事务,否则用现有事务。注释中的rollbackFor=Exception.class表示抛出异常时回滚事务。如果使用了多个数据库,那么就必须使用AOP 的方式进行事务的管理。到此为止,不是分布式应用的spring+jpa(hibernate)的框架就搭建完成了。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 7 页 -