hibernate配置一对多关系出错.....
各位,请帮忙看看哪里出错了,情况如下:
create table student(sid int(10) not null primary key auto_increment,sname varchar(20));
create table book(bid int(10) not null primary key auto_increment,s_id int(10) not null default '0',bname varchar(20),foreign key bs(s_id) references student(sid));
Student.java:
package oneToMany;
import java.util.HashSet;
import java.util.Set;
public class Student {
private int sid;
private String sname;
private Set book=new HashSet();
public Set getBook() {
return book;
}
public void setBook(Set book) {
this.book = book;
}
public int getSid() {
return sid;
}
public void setSid(int sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
}
Book.java:
package oneToMany;
public class Book {
private int bid;
private int s_id;
private String bname;
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getBname() {
return bname;
}
public void setBname(String bname) {
this.bname = bname;
}
public int getS_id() {
return s_id;
}
public void setS_id(int s_id) {
this.s_id = s_id;
}
}
Student.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<!-- should write down the redirect path,not only the java name -->
<class name="oneToMany.Student" table="student">
<id name="sid" column="sid">
<generator class="increment"/>
</id>
<property name="sname" column="sname"/>
<set name="book" table="book" lazy="false" inverse="false" cascade="none">
<key column="sid"/>
<one-to-many class="oneToMany.Book"/>
</set>
</class>
</hibernate-mapping>
Book.hbm.xml:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
<hibernate-mapping>
<!-- should write down the redirect path,not only the java name -->
<class name="oneToMany.Book" table="book">
<id name="bid" column="bid">
<generator class="increment"/>
</id>
<property name="bname" column="bname"/>
<property name="s_id" column="s_id"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml:
<hibernate-configuration>
<session-factory>
..........其它省略...............
<mapping resource="oneToMany/Student.hbm.xml"/>
<mapping resource="oneToMany/Book.hbm.xml"/>
</session-factory>
</hibernate-configuration>
测试类:
package oneToMany;
import net.sf.hibernate.*;
import net.sf.hibernate.cfg.*;
import java.sql.SQLException;
import java.util.Set;
public class TestOneToMany {
public static void main(String[] args) throws SQLException
{
try
{
SessionFactory sf=new Configuration().configure().buildSessionFactory();
Session session=sf.openSession();
Transaction tx=session.beginTransaction();
Student st=new Student();
st.setSname("jason");
Set bookset=st.getBook();
Book book=new Book();
book.setBname("java");
bookset.add(book);
st.setBook(bookset);
session.save(st);
tx.commit();
}
catch(HibernateException e)
{
e.printStackTrace();
}
}
}
最终出错信息:
Hibernate: insert into student (sname, sid) values (?, ?)
Hibernate: update book set sid=? where bid=?
log4j:WARN No appenders could be found for logger (net.sf.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
net.sf.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
at net.sf.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:69)
at net.sf.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:29)
at net.sf.hibernate.impl.BatcherImpl.convert(BatcherImpl.java:328)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:135)
at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2438)
at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2396)
at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2261)
at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
at oneToMany.TestOneToMany.main(TestOneToMany.java:30)
Caused by: java.sql.BatchUpdateException: Unknown column 'sid' in 'field list'
at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:1629)
at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:128)
... 5 more