zoukankan      html  css  js  c++  java
  • 【原创】Hibernate自动生成(1)

    本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正。 

    开发环境: Eclipse Version: Photon Milestone 6

    WCP:http://www.wcpdoc.com/home/Pubindex.html

    目录:

    Hibernate自动生成(1)

    Hibernate自动生成(2)

    动软生成的WCP DAO层模板(不使用接口)

    废话少说,操刀实战:

    1.安装JBossTools

    默认这样

    我们只要选Hibernate Tools,第一个自动会选上。

    点击finish。然后就开始安装。。。

     装完重启。

    2.配置数据库

    右键new

     默认

     发现没驱动(由于我下载了最新版本的eclipsephoton,最新版本里面没有安装插件)

    下载:eclipse插件 

               解压,看到两个目录,这是eclipse的插件,复制到eclipse的相应目录

                       

              mysql驱动     

              解压,需要里面的mysql-connector-java-5.1.46-bin.jar

    好了,再来:

    在eclipse目录下,新建一个lib目录,把刚才的jar 包放在里面,然后在这个界面选择这个jar 

     数据库连上了!

     备注:

    后来发现,在这个开源项目里也有可以拷贝到这个mysql的jar包

     3.自动生成

     1.新建一个测试的maven项目

    点击完成:

    2. 

     

     注意: Hibernate Version 选4.3 ,否则后面会报错,看下图:(这个是后面发现错误后,补的说明,非常重要!!)

    必须要和你的jar包的版本一致!!

     选MySQL

    点击OK

    为了测试,先到小海豚里新建个表:

     选上,OK

    完成后看到多出一个这个:点击Generation Configurations...

     

     

      

    点击run,过了几秒后,报错:

    没dom4j的包,那就直接把pom.xml拷贝一份过来咯:(试验结果,还是没有用!!!)

    但是你得记得,拷贝过去之后,顶上要改下:

     

    之前说到,Hibernate配置里面一定要选4.0版本,由于一开始选了5.0版本上面一致报错。

    那就改下:

     OK,再重复刚才的

     点击run

    依然报错。。。。怎木办。。。各种百度,谷歌。。终于找到了问题:

    https://stackoverflow.com/questions/48253238/org-hibernate-mappingexception-could-not-configure-overrides-from-file-hiberna

    原来是:http://hibernate.org/dtd

     <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.org/dtd/hibernate-reverse-engineering-3.0.dtd" >

    改成:http://hibernate.sourceforge.net

     <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >

    整个文件是这样的:这里有个坑,如下图:如果不写sql type  那么生成的实体类的类型 将会是 Serializable 类型。这样运行时会报“无法反序列化”的错误。

    <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE hibernate-reverse-engineering PUBLIC "-//Hibernate/Hibernate Reverse Engineering DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd" >
    
    <hibernate-reverse-engineering>
     <type-mapping>  
     <sql-type jdbc-type="NVARCHAR" hibernate-type="java.lang.String" />
     <sql-type jdbc-type="NCHAR" hibernate-type="java.lang.String" />
     </type-mapping>
     <table-filter match-catalog="tp_member" match-schema="dbo" match-name="member"/>
    </hibernate-reverse-engineering>

      

     点击Run!成功了!@#¥%……!!!  一万个草泥马跑过。。。

    参考:Hibernate 零配置之Annotation注解   自动生成的,不需要都选,用注解的话,不需要hbm.xml

     参考:Spring和EJB3的技术对比

     

    链接MSSQL

    同样,eclipse photon中没有,也从老版本里面拷贝插件,先拷贝一个。其他的不拷。

     plugins下面:

               

    重启eclipse后好了。

     同上面,稍微截几个屏:

     

     

    再建立一个hb的配置文件:

     路径再修正一下

     

    点击 run,就报错,和上面一样。改  http://hibernate.sourceforge.net   ,下次试试,先点击apply再close,改完前面这个再run。。每次报错好麻烦。

    改完再run一下,生成成功了,WTF!又是报错。大概 应该是刚才选的ejb的注解。因为我没有引用 ejb的包。注释掉就不报错了。

    大致上算是成功了。

     

    去掉后还剩一个错,参考:https://blog.csdn.net/ultrakang/article/details/41820543

    serialVersionUID 用来表明类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。

     

     关于序列化:为啥要序列化,为啥属性类型是Serializable,可不可以不要?

                       1. hibernate有二级缓存,需要把对象持久化,必须要可序列化。

                       2. mssql 字段类型 为varchar,自动生成的实体对象的属性会变成 Serializable,得把数据库中的字段类型变为char().   

                       参考:关于Hibernate的实体类中为什么要继承Serializable的解答 

                               通过hibernate tool生成实体类时候数据库是nvarchar实体类会字段类型为Serializable

                     怎么办?   

                       有人问了:1.  https://stackoverflow.com/questions/32224054/hibernate-converting-nvarchar-to-serializable-on-creating-pojo-classes-from             

                                         2.   Reverse Engineering with Hibernate Tools in Eclipse Indigo

                                         3. 文档:https://docs.jboss.org/tools/latest/en/hibernatetools/html/reverseengineering.html#type_map

    在hibernate.reveng.xml中加这个,it OK!good~ 

    (备注:这个图确有个,见上面有个xml,是我后来补的)

     <type-mapping>  
     <sql-type jdbc-type="NVARCHAR" hibernate-type="java.lang.String" />
     </type-mapping>

    Pretty Good,aha?

                    

                 

    文献参考:

    用hibernate tools生成对应的sql应用代码

    Eclipse中通过Hibernate Tools插件实现从数据库逆向生成Hibernate带注解的实体类

    maven构建hibernate项目及其详解 

    B站尚硅谷Hibernate视频

    用MyEclipse自动生成hibernate映射文件和实体类

    maven构建hibernate项目及其详解

    官网下载完全匹配自己Eclipse版本的Hibernate Tools

    Hibernate Tools for Eclipse的使用

    **hibernate annotation注解方式来处理映射关系

     

  • 相关阅读:
    Java基础知识【上】(转载)
    Windows下Python中pip安装Pillow报错总结(转载)
    CentOS7下安装Python的pip
    CentOS7安装NodeJS6.9
    PostGIS(解压版)安装
    CentOS7中安装Python3.5
    CentOS7安装docker
    Centos7更改默认启动模式(转载)
    CentOS7 查看IP、Gateway、DNS、Hostname
    CentOS7系统安装及初始化
  • 原文地址:https://www.cnblogs.com/lhuser/p/8961009.html
Copyright © 2011-2022 走看看