休眠连接问题
问题描述:
我已经建立了Hibernate插件到NetBeans和无法连接到MySQL DBS - 代码:休眠连接问题
package client;
import org.hibernate.*;
import org.hibernate.cfg.*;
import java.util.*;
public class HiberTest {
private static SessionFactory sessionFactory;
private int id;
public int getId() {
return this.id;
}
public void setId(int id) {
this.id = id;
}
protected static void setUp() throws Exception {
// A SessionFactory is set up once for an application
sessionFactory = new Configuration()
.configure() // configures settings from hibernate.cfg.xml
.buildSessionFactory();
}
public static void main(String[] args) throws Exception {
setUp();
Session session = HibernateUtils.getSessionFactory().openSession();
session.beginTransaction();
Query q = session.createQuery("CREATE TABLE test(myInt int not null)");
List resultList = q.list();
System.out.println(resultList);
session.getTransaction().commit();
session.close();
}
}
HibernateUtils.class
package client;
import org.hibernate.cfg.*;
import org.hibernate.SessionFactory;
public class HibernateUtils {
private static final SessionFactory sessionFactory = buildSessionFactory();
private static SessionFactory buildSessionFactory() {
try {
// Create the SessionFactory from hibernate.cfg.xml
return new Configuration().configure().buildSessionFactory();
} catch (Throwable ex) {
// Make sure you log the exception, as it might be swallowed
System.err.println("Initial SessionFactory creation failed." + ex);
throw new ExceptionInInitializerError(ex);
}
}
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
}
的错误:
May 22, 2011 12:40:33 PM org.hibernate.hql.ast.ErrorCounter reportError
SEVERE: line 1:1: unexpected token: CREATE
Exception in thread "main" java.lang.IllegalArgumentException: node to traverse cannot be null!
at org.hibernate.hql.ast.util.NodeTraverser.traverseDepthFirst(NodeTraverser.java:31)
at org.hibernate.hql.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:254)
at org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:157)
at org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
at org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
at org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
at org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
at org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
at client.HiberTest.main(HiberTest.java:36)
Java Result: 1
请帮我解决这个问题,这是我处理hibernate的一个难点。 所有CFG更改后我desided张贴cfg.xml中和的hbm.xml可能有人会在这里建议的东西,他们是: cfg.xml中
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://myhost:3306/wwwgeeksearthcom_geeksearth_test</property>
<property name="hibernate.connection.username">user_name</property>
<property name="hibernate.connection.password">**********</property>
<property name="hibernate.show_sql">true</property>
<!--<property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTransactionFactory</property>-->
<mapping resource="hibernate.hbm.xml"/>
</session-factory>
</hibernate-configuration>
和的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">
<hibernate-mapping>
<class name="HiberTest" table="guests">
<id name="id" column="g_id">
<generator class="native"/>
</id>
</class>
</hibernate-mapping>
答
日志已经说过,映射文件hibernate.hbm.xml
内<class>
的格式不正确,因为有下列错误:
的ELE内容(meta *,subselect?,cache?,synchronize *,comment?,tuplizer *,(id | composite-id),discriminator?,natural-id?,(())是( 不完整的,它必须匹配 版本|时间戳),(属性|多对一|一对一|组件|动态组件|属性|任意|地图|集|列表|袋| idbag |数组|原始数组)| ,( (join,subclass *)| joined-subclass * | union-subclass *),loader?,sql-insert?,sql-update?,sql-delete?,filter *,resultset *,(query | sql-query) *)”
此错误消息表明您违反了<class>
的一些要求,例如:
- 它只能包含括号内的子元素
- *号表示子元素可以出现零次或多次。
- The?符号表示子元素可以出现零次或一次。
- 没有*和?必须包括该子元素并且仅包括一次(例如,id)
可以参考this来知道如何读取DTD元素语法。
答
,你应该为这个菜单与NetBeans速效只需右键点击XML的.xml文件check xml
和validate xml
使用和检查
呀,谢谢 - 我会检查我的映射hbm.xml文件中。 – 2011-05-22 07:02:16
现在我确定U只会浏览上面添加的XML文件,并告诉我这是什么问题。我会很感激这一点。我试图解决这个问题,但...错误仍然在这里 – 2011-05-22 07:23:21
你的xml应该被验证。我认为这是因为其他错误。这次的错误信息是什么? – 2011-05-22 07:31:41