【原创】Hibernate自动生成(1)
本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正。
开发环境: Eclipse Version: Photon Milestone 6
WCP:http://www.wcpdoc.com/home/Pubindex.html
目录:
Hibernate自动生成(1)
Hibernate自动生成(2)
废话少说,操刀实战:
1.安装JBossTools
默认这样
我们只要选Hibernate Tools,第一个自动会选上。
点击finish。然后就开始安装。。。
装完重启。
2.配置数据库
右键new
默认
发现没驱动(由于我下载了最新版本的eclipsephoton,最新版本里面没有安装插件)
下载:eclipse插件
解压,看到两个目录,这是eclipse的插件,复制到eclipse的相应目录
解压,需要里面的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
链接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?
文献参考:
Eclipse中通过Hibernate Tools插件实现从数据库逆向生成Hibernate带注解的实体类
用MyEclipse自动生成hibernate映射文件和实体类
官网下载完全匹配自己Eclipse版本的Hibernate Tools
Hibernate Tools for Eclipse的使用
**hibernate annotation注解方式来处理映射关系
【原创】Hibernate自动生成(1)的更多相关文章
- 【原创】Hibernate自动生成(2)
本实战是博主初次学习Java,分析WCP源码时,学习HibernateTools部分的实战,由于初次接触,难免错误,仅供参考,希望批评指正. 开发环境: Eclipse Version: Photon ...
- hibernate自动生成映射文件
映射文件是O/R Mapping的关键,相当于控制中心.当数据库表较多时,手动配置该映射文件非常耗时.为了快速开发程序,使开发人员的注意力集中到业务逻辑上来,Hibernate官方提供的MiddleG ...
- Hibernate自动生成实体类注解(转)
常用的hibernate annotation标签如下: @Entity --注释声明该类为持久类.将一个Javabean类声明为一 个实体的数据库表映射类,最好实现序列化.此时,默认情况下,所有的类 ...
- intellij配置hibernate自动生成hbm.xml文件
1.首先创建一个Java web项目,这里因为已经在整个项目中配置好tomcat了,所以我是直接创建module的,其实和创建project的配置方法一样,创建的时候选择Web Application ...
- MyEclipse 2015 如何使项目能够使用 Hibernate自动生成文件
在MyEclipse-Project facets 下 对hibernate这一栏打钩即可
- Hibernate 自动生成数据库表
http://blog.csdn.net/u010096526/article/details/50533428
- hibernate自动生成时报错问题
创建好了实体类和.hbm.xml文件,运行项目报上错: 实体类和xml文件中的字段要一致.(顺序和字段)
- hibernate如何配置自动生成表
hibernate自动生成表有两种方法: 1.直接写代码,通过方法来创建数据库表. 2.通过 hibernate.cfg.xml配置标签来创建数据表. 下面依次实现: 1.直接写代码,通过方法来创建数 ...
- python 自动生成C++代码 (代码生成器)
python 代码自动生成的方法 (代码生成器) 遇到的问题 工作中遇到这么一个事,需要写很多C++的底层数据库类,但这些类大同小异,无非是增删改查,如果人工来写代码,既费力又容易出错:而借用pyth ...
随机推荐
- 设计模式之装饰器模式(PHP实现)
/** * 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. * 这种模式创建了一个 ...
- python getopt学习记录
有时候我们需要写一些脚本处理一些任务,这时候往往需要提供一些命令行参数,根据不同参数进行不同的处理,在Python里,命令行的参数和C语言很类似(因为标准Python是用C语言实现的).在C语言里,m ...
- [转载]CentOS修改用户最大进程数
FROM: http://www.2cto.com/os/201303/192380.html CentOS修改用户最大进程数 一般在/etc/security/limits.conf 中修改最大 ...
- S4:装饰模式 Decorator
动态的给一个对象添加额外的一些职责,就增加功能而言,比继承更具灵活性. 如果仅有一个ConcreateComponent,也可以让Decorator继承ConcreateComponent来实现装饰功 ...
- Laravel利用pusher推送消息
一.注册pusher 1.注册https://pusher.com/ 2.获取key,密匙,app_id等 二.配置pusher 1.安装pusher composer require pusher/ ...
- 斯坦福《机器学习》Lesson4感想--1、Logistic回归中的牛顿方法
在上一篇中提到的Logistic回归是利用最大似然概率的思想和梯度上升算法确定θ,从而确定f(θ).本篇将介绍还有一种求解最大似然概率ℓ(θ)的方法,即牛顿迭代法. 在牛顿迭代法中.如果一个函数是,求 ...
- Android Studio加入插件(Genymotion)
官方模拟器的龟速已让我们无力吐槽.幸好有genymotion这款逆天的Android虚拟机,它有着高速的开启速度,良好的交互界面. 是Android开发必备的良品.甚至有些玩家已经用genymotio ...
- Linux vim命令记录
Ndd :删除N行 多行删除 :1,10d ctrl+v ,移动光标,ctrl+i,输入#,esc :移动处均会输入# gg:文档头 G:文档尾 o:下一行,并进入insert模式 O:上一行并输入 ...
- TCP/IP详解 卷一(第十八章 TCP连接的建立和终止)
建立连接 建立一个TCP连接时会发生下述情况 1.客户TCP发送一个SYN(同步)分节,它告诉服务器将在(待建立)连接中发送的数据的初始序列号. 2.服务器确认(ACK)客户的SYN,同时自己也得发送 ...
- Oracle dos连接数据库基本操作
sqlplus / as sysdba;(sqlplus 用户名/密码@ip:端口:数据库实例 as sysdba;) ;(设置显示多少列,pagesize:;每页多少记录) select * fro ...