异常:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
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 TrainDAO.save(TrainDAO.java:35)
at Test.main(Test.java:21)
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 'FROM, TO, ID) values ('ShanTou', 'NanJing', 'k25')' at line 1
at com.mysql.jdbc.PreparedStatement.executeBatchSerially(PreparedStatement.java:1257)
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:943)
at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:58)
at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:195)
... 9 more有两个表:TICKET和TRAIN(下面是一些表示,可能不太准确,自己写的,TRAIN_ID参照TRAIN的ID,为“restrict”)
TICKET{
TRAIN_ID VARCHAR(45),
SEAT_ID VARCHAR(45),
FOREIGN KEY TRAIN.ID,
}
TRAIN{
ID VARCHAR(45),
FROM VARCHAR(45),
TO VARCHAR(45),
}
两个配置文件:
Ticket.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="Ticket" table="ticket" catalog="test">
        <composite-id name="id" class="TicketId">
            <key-many-to-one name="train" class="Train">
                <column name="TRAIN_ID" length="45" />
            </key-many-to-one>
            <key-property name="seatId" type="java.lang.Integer">
                <column name="SEAT_ID" />
            </key-property>
        </composite-id>
    </class>
</hibernate-mapping>Train.hbm.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="Train" table="train" catalog="test">
        <id name="id" type="java.lang.String">
            <column name="ID" length="45" />
            <generator class="assigned"></generator>
        </id>
        <property name="from" type="java.lang.String">
            <column name="FROM" length="45" not-null="true" />
        </property>
        <property name="to" type="java.lang.String">
            <column name="TO" length="45" not-null="true" />
        </property>
        <set name="tickets" inverse="true">
            <key>
                <column name="TRAIN_ID" length="45" not-null="true" />
            </key>
            <one-to-many class="Ticket" />
        </set>
    </class>
</hibernate-mapping>Test类:
public static void main(String[] args) {
TicketId tId=new TicketId();
Ticket tk1=new Ticket();
tId.setSeatId(1);

Train t1=new Train();
t1.setId("k25");
t1.setFrom("ShanTou");
t1.setTo("NanJing");

tId.setTrain(t1);
tk1.setId(tId);

TrainDAO tDAO=new TrainDAO();
tDAO.save(t1);//老是在这里出现错误。

TicketDAO tkDAO=new TicketDAO();
tkDAO.save(tk1);
}