Hibernate问题

13 篇文章 0 订阅
9 篇文章 0 订阅

自己初学hibernate,跟着传智的《SSH框架整合实战教程》来的,在第七章的第一个程序上遇到问题,感觉书中的方法有点麻烦,可能是用的Eclipse的原因,我自己摸索的IDEA来写,之前自学android的时候习惯用adt bundle,之后又习惯上了AS,第一次用IDEA感觉就像AS一样,第一次就喜欢上了这个工具

这里附一篇网络上用IDEA写hibernate工程的教程,配置方法跟《SSH框架整合实战教程》中的方法完全不同,这里就两个方法稍微写点自己的东西,因为是自学可能有说的不对的地方
http://blog.csdn.net/u014520745/article/details/51408049

这里传智书本上的方法暂且称作方法一,网络上比较流行的方法称作方法二,下面进行对比一下

方法一:需要去创建和修改的配置文件内容会比方法二多一点,很多东西根本不想浪费时间去手敲好吧,其次书中内容根本无法运行,报错

java.sql.SQLException: Field ‘id’ doesn’t have a default value

解决办法:http://blog.sina.com.cn/s/blog_630d50dc0100wsn9.html

在MYSQL 中执行如下SQL就可以这样:就解决了
alter table department modify column id int NOT NULL AUTO_INCREMENT;

同样的数据库,同样的表,方法二却没有这个问题

方法二:直接使用IDEA来创建一个hibernate工程,.cfg.xml可以自动创建,其次提供的这个网络配制方法.cfg.xml配置文件中缺少数据库用户名跟密码,所以按教程来也会报错,需要自己手动添加上

<!--数据库的用户名-->
        <property name="hibernate.connection.username">UserName</property>
        <!--数据库的密码-->
        <property name="hibernate.connection.password">Your Password</property>

方法一、二的不同点:在方法二中压根没找到.hbm.xml文档的影子,但是程序效果却跟传智课本中的效果一致,网上好像说是自动生成了,但我并没有找到,也没去深究。

方法一,方法二共同的一个问题,中文乱码问题:这是我最烦遇到的一个问题之一了,但是这里处理起来也非常简单,就是把方法一、二的数据库连接语句稍微改一下即可:

<property name="hibernate.connection.url">
        <![CDATA[jdbc:mysql://localhost:3306/daycode?useUnicode=true&characterEncoding=utf8]]>
</property>

中文乱码解决博客链接:http://blog.csdn.net/qq_32239767/article/details/72236745

二、书中修改数据的测试方法:
实测方法一可以修改,不能插入,方法二能插入不能修改,百度发现了问题所在,在于主键是否设置自动增长的问题也就是跟之前解决的java.sql.SQLException: Field ‘id’ doesn’t have a default value
这个问题是相互冲突的

修改这里报的错误为:Batch update returned unexpected row count from update [0]; actual row count: 0;

那么现在问题来了,同样的数据库同一张表,主键的自增与否也是确定的,为什么方法一能改不能插,方法二能插不能改呢?

而且方法二一旦出现报错,数据库表中的数据会全部消失,而且永远只能插入一条id为0的数据,并且勾选的id自增属性也会消失。

现在明白的差不多了
org.hibernate.TransientObjectException: The given object has a null identifier:
错误解释:瞬时对象异常:给的对象没有id值,hibernate更新失败

设置了主键自增以后,方法一插入修改都可以了,但是方法二的修改包括插入还存在问题没解决

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值