1

こんにちは、私は休止状態が初めてで、現在、実際に何かをしようとしています。しかし、いくつかのエラーがあります。

プロジェクトで休止状態を使用しようとしています。チュートリアルを読み、Hibernate を Java Maven プロジェクトに統合し始めました。まず、次の依存関係を追加しました。

<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.6.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-c3p0</artifactId>
<version>5.0.6.Final</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>

次のステップは、hibernate.cfg.xml ファイルを src/main/resources ディレクトリに追加することでした。このファイルは次のようになります。

<?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://localhost/testprojectdatabase</property>
    <property name="hibernate.connection.username">username_here</property>
    <property name="hibernate.connection.password">password_here</property>

    <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
    <property name="hibernate.c3p0.min_size">5</property>
    <property name="hibernate.c3p0.max_size">20</property>
    <property name="hibernate.c3p0.timeout">300</property>
    <property name="hibernate.c3p0.max_statements">50</property>

    <mapping resource="milkiv/mytestproject/models/UserInfo.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

次にUserInfo.java、マッピングuser_infoテーブルを作成して中src/main/java/milkiv/mytestproject/models/UserInfo.javaに入れ、中UserInfo.hbm.xmlに入れたファイル src/main/resources/milkiv/mytestproject/models/UserInfo.hbm.xml

UserInfoManager次のようなクラスも作成しました。

public class UserInfoManager implements ManagerAdd<UserInfo> {
    private final SessionFactory factory;

    public UserInfoManager() {
    factory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
    }

    public int add(UserInfo user) {
    Transaction transaction = null;
    Integer userId = null;
    try (Session session = factory.openSession()){
        transaction = session.beginTransaction();
        userId = (Integer) session.save(user);
        transaction.commit();
    } catch (HibernateException he) {
        if (transaction != null) {
        transaction.rollback();
        }
    }
    return userId;
    }
}

メソッドのテストを作成しようとすると、ファクトリー初期化のコンストラクター add(UserInfo user)で失敗しました。UserInfoManager

Mapping (RESOURCE) not found : milkiv/mytestproject/models/UserInfo.hbm.xml : origin(milkiv/mytestproject/models/UserInfo.hbm.xml)

そのため、最終的には場所がわかりましたが、これを修正する方法がわかりません。stackoverflow でこの質問に対する多くの回答を読みましたが、誰もこのエラーを修正するのを手伝ってくれませんでした。

この問題を解決するためのアイデア、ヘルプ、説明をいただければ幸いです...

完全なスタック トレース: マッピング (リソース) が見つかりません: milkiv/mytestproject/models/UserInfo.hbm.xml: origin(milkiv/mytestproject/models/UserInfo.hbm.xml) org.hibernate.boot.MappingNotFoundException at org.hibernate.boot .spi.XmlMappingBinderAccess.bind(XmlMappingBinderAccess.java:56) org.hibernate.boot.MetadataSources.addResource(MetadataSources.java:274) org.hibernate.boot.cfgxml.spi.MappingReference.apply(MappingReference.java:70) ) org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:413) で org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87) で org.hibernate.cfg.Configuration.buildSessionFactory( Configuration.java:692) の org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:724) の milkiv.mytestproject.managers.UserInfoManager.(UserInfoManager.java:22) milkiv.mytestproject.managers.UserInfoManagerTest.testAdd(UserInfoManagerTest.java:24) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ) org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java の java.lang.reflect.Method.invoke(Method.java:497) :44) org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) で org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) で org.junit.internal. org.junit.runners.BlockJUnit4ClassRunner の runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)。runNotIgnored(BlockJUnit4ClassRunner.java:79) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) org.junit.runners.ParentRunner $3.run(ParentRunner.java:193) org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) org.junit. runners.ParentRunner.access$000(ParentRunner.java:42) org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) org.junit.runners.ParentRunner.run(ParentRunner.java:236) org .apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252) at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141) at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112) の sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) の sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl. java:43) で java.lang.reflect.Method.invoke(Method.java:497) で org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) で org.apache.maven.surefire .booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess (ForkedBooter.java:115) org.apache.maven.surefire.booter.ForkedBooter.main (ForkedBooter.java:75) で(JUnit4Provider.java:112) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で、sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) で、sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) でjava.lang.reflect.Method.invoke(Method.java:497) で org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) で org.apache.maven.surefire.booter.ProviderFactory $ProviderProxy.invoke(ProviderFactory.java:165) の org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) の org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java) :115) org.apache.maven.surefire.booter.ForkedBooter.main (ForkedBooter.java:75) で(JUnit4Provider.java:112) で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド) で、sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) で、sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) でjava.lang.reflect.Method.invoke(Method.java:497) で org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) で org.apache.maven.surefire.booter.ProviderFactory $ProviderProxy.invoke(ProviderFactory.java:165) の org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) の org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java) :115) org.apache.maven.surefire.booter.ForkedBooter.main (ForkedBooter.java:75) でNativeMethodAccessorImpl.invoke0(Native Method) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) の sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) の java.lang.reflect.Method.invoke(Method. java:497) org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) で org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) で org org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter .ForkedBooter.main(ForkedBooter.java:75)NativeMethodAccessorImpl.invoke0(Native Method) の sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) の sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) の java.lang.reflect.Method.invoke(Method. java:497) org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) で org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) で org org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) at org.apache.maven.surefire.booter .ForkedBooter.main(ForkedBooter.java:75)org.apache.maven.surefire.util で java.lang.reflect.Method.invoke(Method.java:497) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で (NativeMethodAccessorImpl.java:62) を呼び出す.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory) .java:85) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) で org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) でorg.apache.maven.surefire.util で java.lang.reflect.Method.invoke(Method.java:497) で sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) で (NativeMethodAccessorImpl.java:62) を呼び出す.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189) org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory) .java:85) org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) で org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) でorg.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) の org.apache.maven.surefire.booter.ProviderFactory の Surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)。 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) の invokeProvider(ProviderFactory.java:85) org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) のorg.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165) の org.apache.maven.surefire.booter.ProviderFactory の Surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)。 org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115) の invokeProvider(ProviderFactory.java:85) org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75) のbooter.ForkedBooter.main(ForkedBooter.java:75)booter.ForkedBooter.main(ForkedBooter.java:75)

更新 誰かが必要な場合は、@ v.ladynev回答のコメントで解決してください。

4

2 に答える 2

3

私はあなたのアプローチをチェックし、すべてがうまくいきます。

UserInfo.hbm.xml入れたらsrc/main/resources/milkiv/mytestproject/models/UserInfo.hbm.xml

に表示されます

bin/milkiv/mytestproject/models/UserInfo.hbm.xml

binビルド後 (ビルド フォルダーの代わりに)。

その/milkiv/mytestproject/models/ため、ビルド フォルダー内の他のソース パッケージと同じように見えます。これをチェックしてください。resourceクラスパスにフォルダーがあることを確認します。

/最初に追加してみる

<mapping resource="/milkiv/mytestproject/models/UserInfo.hbm.xml"/>

アップデート

最初に追加/しても問題ありません。Hibernate によってロードされる前に削除されるためClassLoaderです。したがって、最も有効な方法/は、最初からありません。

UserInfo.hbm.xmlのルートに入れてみてくださいresources

<mapping resource="UserInfo.hbm.xml"/>

アップデート

テストしてみる

 public UserInfoManager() {
        System.out.println(UserInfoManager.class
                .getResource("/milkiv/mytestproject/models/UserInfo.hbm.xml"));

        System.out.println(ClassLoader.getSystemClassLoader().getResource(
                "milkiv/mytestproject/models/UserInfo.hbm.xml"));
}

/最初のケースのリードに注意してください。後のコンソール出力

new UserInfoManager();
于 2016-03-02T06:30:02.810 に答える