日期:2014-05-17  浏览次数:20859 次

hibernate遇到的十分诡异的一个问题 (初级)
测试hibernate小程序,所有jar包、xml配置都搞定,然后先测试一个teacher表。

源码如下:
-----------------------------------------
Teacher.java按照最简单的写法如下:

@Entity
public class Teacher {
?? ?private int id;
?? ?private String name;

?? ?@Id
?? ?@GeneratedValue
?? ?public int getId() {
?? ? ? ?return id;
?? ?}
?? ?public void setId(int id) {
?? ? ? ?this.id = id;
?? ?}
?? ?public String getName() {
?? ? ? ?return name;
?? ?}
?? ?public void setName(String name) {
?? ? ? ?this.name = name;
?? ?}

}

测试类如下:
public class TeacherTest {

?? ?private Session session= null;
?? ?
?? ?@Before
?? ?public void before(){
?? ? ? ?Configuration cfg = new AnnotationConfiguration();
?? ? ? ?SessionFactory sf = cfg.configure().buildSessionFactory();
?? ? ? ?session = sf.getCurrentSession();
?? ? ? ?session.getTransaction().begin();
?? ?}
?? ?
?? ?@Test
?? ?public void test01(){
?? ? ? ?
?? ? ? ?Teacher t = new Teacher();
?? ? ? ?t.setName("t2");
?? ? ? ?session.save(t);
?? ? ? ?
?? ?}
?? ?
?? ?@After
?? ?public void after(){
?? ? ? ?session.getTransaction().commit();
?? ?}
?? ? ? ?
?? ?
}
-------------------------------------------



测试test01()这个方法,成功,检查数据库,确实建表成功,数据也插入。


然后,诡异的现象出现了。。。。。。。。。。。。。。

我再建立一个文件,Group.java 里面内容和Teacher.java完全一样,意思就是再建
立一个表user。然后我又写了个测试方法test02(),如下:

?? ?@Test
?? ?public void test02(){
?? ? ? ?
?? ? ? ?Group group = new Group();
?? ? ? ?group.setName("china");
?? ? ? ?session.save(group);
?? ? ? ?
?? ?}

Junit测试 test02(),结果报错了。。。

报错信息如下:

org.hibernate.exception.SQLGrammarException: Could not execute 
JDBC batch update ?at 
org.hibernate.exception.SQLStateConverter.convert(SQLStateConverte
r.java:90)
.
.
.
.
Caused by: java.sql.BatchUpdateException: You have an error in 
your SQL syntax; check the manual that corresponds to your MySQL 
server version for the right syntax to use near 'Group (name, id) 
values ('china', 1)' at line 1
?? ?at 
com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStat
ement.java:2054)
?? ?at .
.
.
.
.

我百思不得其解,到底哪里错了?两个表结构一样,测试方法一样,为什么第一个可以
执行,第二个就不可以执行了?????????

求大神指教!!!拜谢!!!!!