本实战是博主初次学习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注解方式来处理映射关系

【原创】Hibernate自动生成(1)的更多相关文章

  1. 【原创】Hibernate自动生成(2)

    本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正. 开发环境: Eclipse Version: Photon ...

  2. hibernate自动生成映射文件

    映射文件是O/R Mapping的关键,相当于控制中心.当数据库表较多时,手动配置该映射文件非常耗时.为了快速开发程序,使开发人员的注意力集中到业务逻辑上来,Hibernate官方提供的MiddleG ...

  3. Hibernate自动生成实体类注解(转)

    常用的hibernate annotation标签如下: @Entity --注释声明该类为持久类.将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类 ...

  4. intellij配置hibernate自动生成hbm.xml文件

    1.首先创建一个Java web项目,这里因为已经在整个项目中配置好tomcat了,所以我是直接创建module的,其实和创建project的配置方法一样,创建的时候选择Web Application ...

  5. MyEclipse 2015 如何使项目能够使用 Hibernate自动生成文件

    在MyEclipse-Project facets 下 对hibernate这一栏打钩即可

  6. Hibernate 自动生成数据库表

    http://blog.csdn.net/u010096526/article/details/50533428

  7. hibernate自动生成时报错问题

    创建好了实体类和.hbm.xml文件,运行项目报上错: 实体类和xml文件中的字段要一致.(顺序和字段)

  8. hibernate如何配置自动生成表

    hibernate自动生成表有两种方法: 1.直接写代码,通过方法来创建数据库表. 2.通过 hibernate.cfg.xml配置标签来创建数据表. 下面依次实现: 1.直接写代码,通过方法来创建数 ...

  9. python 自动生成C++代码 (代码生成器)

    python 代码自动生成的方法 (代码生成器) 遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错:而借用pyth ...

随机推荐

  1. [置顶] kubernetes资源类型--deployment

    Deployment(中文意思为部署.调度)提供了一种更加简单的更新RC和Pod的机制,K8S版本1.2实现的.通过在Deployment中描述所期望的集群状态,Deployment Controll ...

  2. 关于国内外CV领域牛人的博客链接 .

    此文为转载文章,尊重知识产权http://blog.csdn.net/carson2005/article/details/6601109此为原文链接,感谢作者! 以下链接是关于计算机视觉(Compu ...

  3. Scala和Java二种方式实战Spark Streaming开发

    一.Java方式开发 1.开发前准备:假定您以搭建好了Spark集群. 2.开发环境采用eclipse maven工程,需要添加Spark Streaming依赖. 3.Spark streaming ...

  4. .Net普通三层->工厂模式->线程内唯一+单元工作模式->WebService分布式三层

    在软件世界分层的思想无处不在 主要是为了提高软件系统的维护性,扩展性,复用性和解耦等 软件的三层构架是一种最基本的分层思想的体现 结构图大体如下: 如此一来,开发人员可以只关注其中一层,而无需关心下一 ...

  5. sql取随机结果集

    应用场景: 某日,接产品姐姐需求,网站搜索页在搜索特定的内容时候,会现实搜索不到结果!如衣服网站,搜索鞋子等.为了不直接呈现一个赤裸裸的无此商品页面,so,需要在搜索商品件数小于3时,在下面随机推荐本 ...

  6. linux获取后台进程的控制台数据

    linux提供了一个daemon函数,使得进程能够脱离控制台执行,实现了后台执行的效果.可是进程后台执行后,原本在终端控制台输出的数据就看不到了. 那么,如何才干找回这些数据? 这里.文章主题就环绕着 ...

  7. 倍福TwinCAT(贝福Beckhoff)基础教程 松下伺服驱动器报错 88怎么办

    请确认在TWINCAT在线模式下,把Drive的Modes of operation改为8       更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com ...

  8. vue笔记三(组件)

    十.组件 1.组件中的data为函数 2.props: 父组件向子组件传递数据 子组件:Child.vue <template> <span>{{ myMsg }}</s ...

  9. 手写 jQuery 框架

    1.测试页面; <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

  10. 前端自动化Grunt教程

    最近在学习Bootstrap,了解一部分之后,发现Bootstrap使用了LESS,好嘛,开始学习LESS,LESS了解部分,发现自动编译工具Grunt,了解Grunt过程发现需要使用node.js的 ...