休眠连接问题

时间:2011-05-22 05:40:44

标签: hibernate netbeans

我已经为NetBeans设置了hibernate插件,无法连接到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更改之后我决定发布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>

2 个答案:

答案 0 :(得分:1)

日志已经说过,由于以下错误,映射文件<class>内的hibernate.hbm.xml格式不正确:

  

元素类型“class”的内容是   不完整,必须匹配   “(元*,子查询,缓存,同步*,评论,*的tuplizer(ID?|?复合-ID),鉴别,自然-ID,(版本?|?时间戳),(财产|?许多-TO-一个|一到一个|分量|动态分量|特性|任何|地图|设为|列表|袋| idbag |阵列|原始阵列)的,((合并,子类*)|接合子类* |工会子类*),装载机,SQL插入,SQL更新,SQL-删除,滤波器*,结果集*,(查询|????SQL查询)*)“

此错误消息表示您违反了<class>的某些要求,例如:

  • 它只能包含括号
  • 中列出的子元素
  • *符号表示子元素可以出现零次或多次。
  • ? sign表示子元素可以出现零次或一次。
  • 没有任何*和?标志,必须包含该子元素并且仅包含一次(例如id)

您可以参考this了解如何阅读DTD元素语法。

答案 1 :(得分:0)

你应该使用.xml文件check xmlvalidate xml,因为这个菜单可用netbeans只需右键单击xml并检查