一个非常奇怪的问题,你回答了一定有成就感。

毕业帮 毕业帮 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
小弟最近在使用hibernate做一个简单实践的时候出现一个非常奇怪的问题,先将我本机环境说一下myeclipse+mysql5
没有使用中间件,插入数据和得到数据显示,我是直接在myeclipse控制台打印出来的。

1.在mysql上建立表
-- Table "student" DDL
CREATE TABLE `student` (
`id` int(100) NOT NULL AUTO_INCREMENT,
`username` varchar(100) DEFAULT NULL,
`sex` varchar(10) DEFAULT NULL,
`age` int(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=gbk;

2.工程加入hibernate支持,在hibernate 的date视图上直接将表反转生成相关代码,唯一修改代码的Student.hbm.xml 内容如下:
<hibernate-mapping>
<class name="dao.Student" table="student" catalog="db">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="userName" type="java.lang.String">
<column name="userName" length="100" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
<property name="sex" type="java.lang.String">
<column name="sex" length="10" />
</property>
</class>
</hibernate-mapping>

3.我写了一个类来验证studentDao的 save()方法

package test;

import java.util.List;

import org.hibernate.Transaction;

import dao.Student;
import dao.StudentDAO;

public class testDate {

/**
* @param args
*/
public static void main(String[] args) {
StudentDAO dao = new StudentDAO();
Student stu = new Student();
stu.setUserName("wwww");
stu.setSex("女");
stu.setAge(24);

Transaction t = dao.getSession().beginTransaction();
dao.save(stu);
t.commit();

//StudentDAO dao = new StudentDAO();
List<Student> stus = dao.findAll();

for(Student st: stus){
System.out.println(st.getId());
System.out.println(st.getUserName());
}

}

}


4.如果mysql数据库没有数据的话插入正常,如果有数据则提示如下错误

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate:
select
max(id)
from
student
Hibernate:
insert
into
db.student
(userName, age, sex, id)
values
(?, ?, ?, ?)
Exception in thread "main" org.hibernate.exception.ConstraintViolationException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:71)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:202)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:235)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:139)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:297)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:985)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:333)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at test.testDate.main(testDate.java:24)
Caused by: java.sql.BatchUpdateException: Duplicate entry '3' for key 'PRIMARY'
at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:853)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
... 8 more


请问何解???求达人赐教,在线等啊!!!!!!!
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
毕业帮
Java EE 67,535 成员 225,843 内容