读书人

hibernate有关问题

发布时间: 2012-04-03 12:38:19 作者: rapoo

hibernate问题,急
作者和文章是一对多的关系,两个表映射关系如下:
<hibernate-mapping>
<class name="com.para.zyh.springmvc.model.Article" table="t_article">
<id name="arId">
<generator class="native"></generator>
</id>
<property name="title"></property>
<property name="content"></property>

<many-to-one name="author" class="com.para.zyh.springmvc.model.Author">
<column name="auId"></column>
</many-to-one>
</class>
</hibernate-mapping>




<hibernate-mapping>
<class name="com.para.zyh.springmvc.model.Author" table="t_author">
<id name="auId">
<generator class="native"></generator>
</id>
<property name="name"></property>

<set name="articles">
<key>
<column name="auId"></column>
</key>
<one-to-many class="com.para.zyh.springmvc.model.Article"/>
</set>
</class>
</hibernate-mapping>

hibernate配置如下:

<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration>

<session-factory>
<property name="hbm2ddl.auto">create</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost/test</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="myeclipse.connection.profile">com.mysql.jdbc.Driver</property>

<mapping resource="com/para/zyh/springmvc/model/Article.hbm.xml"/>
<mapping resource="com/para/zyh/springmvc/model/Author.hbm.xml"/>


</session-factory>

</hibernate-configuration>




插数据代码:
public class Data {
public static void main(String[] args) {
Configuration cfg=new Configuration().configure();
SessionFactory sf=cfg.buildSessionFactory();
Session s=sf.openSession();
Transaction t=s.beginTransaction();

//第一行记录
Author au1=new Author();
au1.setName("慕容晓晓");

Set<Article> articles1=new HashSet<Article>();

Article ar1=new Article();
ar1.setAuthor(au1);
ar1.setTitle("下一个天亮");
ar1.setContent("等待下一个天亮的日子,你是风中的信子,我在风中等待着答案");

Article ar2=new Article();
ar2.setAuthor(au1);
ar2.setTitle("风一般的日子");
ar2.setContent("我的每一分钟等待着风一般的日子");

Article ar3=new Article();
ar3.setAuthor(au1);
ar3.setTitle("面朝大海");
ar3.setContent("面朝大海,春暖花开");

articles1.add(ar1);
articles1.add(ar2);
articles1.add(ar3);

au1.setArticles(articles1);



//第二行记录
Author au2=new Author();
au2.setName("雪花");

Set<Article> articles2=new HashSet<Article>();

Article ar4=new Article();
ar4.setAuthor(au2);
ar4.setTitle("天国的嫁衣");
ar4.setContent("天国的嫁衣,我在天国等待你天国的嫁衣");

Article ar5=new Article();
ar5.setAuthor(au2);


ar5.setTitle("哎呀呀");
ar5.setContent("阿雅有隐隐约约隐隐约约隐隐约约隐隐约约");

Article ar6=new Article();
ar6.setAuthor(au2);
ar6.setTitle("红栎木");
ar6.setContent("红勒姆手机费了建设路手机费");

articles2.add(ar4);
articles2.add(ar5);
articles2.add(ar6);

au2.setArticles(articles2);






s.save(ar1);
s.save(ar2);
s.save(ar3);
s.save(ar4);
s.save(ar5);
s.save(ar6);


s.save(au1);
s.save(au2);







t.commit();
s.close();
}


运行插入数据代码报错:
og4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not insert: [com.para.zyh.springmvc.model.Article]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:90)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:64)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2176)
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2656)
at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:71)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:321)
at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:130)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:210)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:56)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:195)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:50)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:563)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:551)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:547)
at com.para.zyh.springmvc.data.Data.main(Data.java:83)
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.t_article' doesn't exist
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:407)
at com.mysql.jdbc.Util.getInstance(Util.java:382)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2415)


at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2333)
at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2318)
at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:94)
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:57)
... 16 more


[解决办法]
Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'test.t_article' doesn't exist

表不存在,你的test用户下有t_article这个表吗?
[解决办法]

探讨
我知道表不存在,我用的是hibernate自动建表<property name="hbm2ddl.auto">create</property>
如果配置没问题的话表是应该可以创建的。。。不知道现在是哪里出了问题。。。请求解答!!!

读书人网 >Java Web开发

热点推荐