0

かなりの時間をかけて調査し、構成のどこで問題が発生したかを突き止めようとしましたが、完全に行き詰まっています。私が読んでいる投稿から、私のドライバーがクラスパスにないという意味があります。Class.forName("com.ibm.db2.jcc.DB2Driver") 行を追加して、ドライバーが使用可能であり、その行に読み込まれることを確認しました。私が見逃したかもしれないことについての提案を本当に感謝します。

私のコードは次のとおりです。

    public class TestHibernateConfig {

    private static SessionFactory sessionFactory;

    public static void testConfig() {
        try {
            DB2Driver drvr = (DB2Driver) Class.forName("com.ibm.db2.jcc.DB2Driver").newInstance();

            Configuration cfg = new Configuration();
            cfg.configure("hibernate.cfg.xml");
            sessionFactory = cfg.buildSessionFactory();
            Session sess = sessionFactory.getCurrentSession();
            Transaction tx = sess.beginTransaction();

            Criteria crit = sess.createCriteria(ItemData.class);
            List items = crit.list();

        } catch (Exception e) {
            Logger logger = Logger.getLogger("");
            logger.error(e.getMessage());
        }
    }
}

コードがヒットすると、クラスが見つからないというエラーが発生します。 sessionFactory = cfg.buildSessionFactory();

hibernate.cfg.xml

    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="speed2db2">
 <property name="hibernate.dialect">org.hibernate.dialect.DB2Dialect</property>
  <property name="hibernate.connection.driver_class">com.ibm.db2.jcc.DB2Driver</property>
  <property name="hibernate.connection.url">jdbc:db2://appdb:50000/MYTEST</property>
  <property name="hibernate.connection.username">myUser</property>
  <property name="hibernate.connection.password">myPass</property>
 </session-factory>
</hibernate-configuration>

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
    <persistence-unit name="speedPersistUnit">
        <class>ItemData</class>
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.DB2Dialect"/>
            <property name="hibernate.connection.url" value="jdbc:db2://appdb:50000/MYTEST"/>
            <property name="hibernate.default_schema" value="MYSCHEMA"/>
            <property name="hibernate.connection.username" value="myUser"/>
            <property name="hibernate.connection.password" value="myPass"/>
            <property name="hibernate.connection.driver_class" value="com.ibm.db2.jcc.DB2Driver"/>
        </properties>
    </persistence-unit>
</persistence>

Eclipse 内からデータベースに接続でき、Hibernate パースペクティブに移動すると、データベース スキーマを参照できます。また、HQL エディターを使用してクラスにデータをロードすることもできます。

編集:

09:35:50,338 INFO  [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000043: Configuring from resource: /com/newpig/speed2DB2/hibernate.cfg.xml
09:35:50,340 INFO  [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000040: Configuration resource: /com/newpig/speed2DB2/hibernate.cfg.xml
09:35:50,369 INFO  [org.hibernate.cfg.Configuration] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000041: Configured SessionFactory: speed2db2
09:35:52,059 INFO  [org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) HHH000402: Using Hibernate built-in connection pool (not for production use!)
09:36:16,856 ERROR [] (http-xxxxxx-xx.xx.xx.xxxx-15081-1) Specified JDBC Driver com.ibm.db2.jcc.DB2Driver class not found

この行でエラーが発生します。

 sessionFactory = cfg.buildSessionFactory();

.war ファイルにデプロイ:
.War
|-WEB-INF
||-lib
|||-db2jcc4.jar
|||-hibernate-core-4.1.2.Final.jar
|||-hibernate-entitymanager-4.1。 2.Final.jar
|||-hibernate-jpa-2.0-api-1.0.1.Final.jar

4

2 に答える 2

1

JBoss7.1 を使用しているとは言いませんでした。結局、Hibernate がドライバーのロードに失敗した理由を突き止めることはできませんでしたが、JNDI を使用するように切り替え、Hibernate から接続を試みる代わりに JBoss standalone.xml でデータソースを構成することで問題を回避しました。

于 2012-04-10T13:53:34.897 に答える
0

hibernate.cfg.xml が間違った場所にあるためだと思います。クラスパスにあるかどうかを確認するか、このようにメソッド呼び出しにクラスパスを追加してみてください。

SessionFactory sessionFactory = new Configuration().configure(
                    "/com/mkyong/persistence/hibernate.cfg.xml")
                    .buildSessionFactory();

于 2012-04-07T11:39:18.763 に答える