1

基本的な休止状態アプリケーションを作成しました。エラーメッセージをスローします。

エラーは次のとおりです。

     Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.5
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration configure
INFO: configuring from resource: /hibernate.cfg.xml
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: Configuration resource: /hibernate.cfg.xml
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : com/crmcall/entity/CallUsers.hbm.xml
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.crmcall.entity.CallUsers -> crmcallusers
Oct 18, 2012 3:36:13 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : com/crmcall/entity/Customers.hbm.xml
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.crmcall.entity.Customers -> crmcustomermaster
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource : com/crmcall/entity/User.hbm.xml
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.crmcall.entity.User -> crmusers
Oct 18, 2012 3:36:14 PM org.hibernate.cfg.Configuration doConfigure
INFO: Configured SessionFactory: null
Initial SessionFactory creation failed.org.hibernate.MappingException: component class not found: string
Exception in thread "main" java.lang.ExceptionInInitializerError
        at com.crmcall.util.HibernateUtil.<clinit>(HibernateUtil.java:27)
        at com.crmcall.dao.UserDAO.<init>(UserDAO.java:23)
        at com.crmcall.dao.UserDAO.main(UserDAO.java:36)
Caused by: org.hibernate.MappingException: component class not found: string
        at org.hibernate.mapping.Component.getComponentClass(Component.java:104)
        at org.hibernate.tuple.component.PojoComponentTuplizer.buildGetter(PojoComponentTuplizer.java:133)
        at org.hibernate.tuple.component.AbstractComponentTuplizer.<init>(AbstractComponentTuplizer.java:43)
        at org.hibernate.tuple.component.PojoComponentTuplizer.<init>(PojoComponentTuplizer.java:38)
        at org.hibernate.tuple.component.ComponentEntityModeToTuplizerMapping.<init>(ComponentEntityModeToTuplizerMapping.java:52)
        at org.hibernate.tuple.component.ComponentMetamodel.<init>(ComponentMetamodel.java:50)
        at org.hibernate.mapping.Component.buildType(Component.java:152)
        at org.hibernate.mapping.Component.getType(Component.java:145)
        at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)
        at org.hibernate.mapping.RootClass.validate(RootClass.java:193)
        at org.hibernate.cfg.Configuration.validate(Configuration.java:1102)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1287)
        at com.crmcall.util.HibernateUtil.<clinit>(HibernateUtil.java:24)
        ... 2 more
Caused by: java.lang.ClassNotFoundException: string
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:169)
        at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
        at org.hibernate.mapping.Component.getComponentClass(Component.java:101)

これは私の Hibernate.cfg.xml ファイルです:

     <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://192.168.1.5:3306/crmtest</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">root</property>
    <property name="hibernate.hbm2ddl.auto">create-drop</property>
    <property name="show_sql">true</property>
    <property name="format_sql">true</property>
    <!-- Enable Hibernate automatic session context management -->
    <property name="current_session_context_class">thread</property>

        <!-- Disable the second-level cache  -->
   <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

    <mapping resource="com/crmcall/entity/CallUsers.hbm.xml"/>
    <mapping resource="com/crmcall/entity/Customers.hbm.xml"/>
    <mapping resource="com/crmcall/entity/User.hbm.xml"/>
  </session-factory>
</hibernate-configuration>

これは私の User.hbm.xml です

    <hibernate-mapping>
  <class name="com.crmcall.entity.User" table="crmusers">
      <composite-id name="userPK" >
           <key-property name="businessUnit" column="BusinessUnit" type="string"/>
           <key-property name="userID" column="UserID" type="string"/>
      </composite-id>

        <property name="recID" >
          <column name="RecID"/>
        </property>

        <property name="password">
          <column name="Password"/>
        </property>

        <property name="userName">
          <column name="UserName"/>
        </property>

        <property name="userType">
          <column name="UserType"/>
        </property>

        <property name="userLevel">
          <column name="UserLevel"/>
        </property>

        <property name="customerCode">
          <column name="CustomerCode"/>
        </property>

        <property name="customerCodeson">
          <column name="CustomerCodeson"/>
        </property>

        <property name="locationCode">
          <column name="LocationCode"/>
        </property>

        <property name="lastUpdatedBy">
          <column name="LastUpdatedBy"/>
        </property>

        <property name="lastUpdatedOn" type="timestamp">
          <column name="LastUpdatedOn"/>
        </property>

      <property name="email" type="string">
          <column name="Email"/>
        </property>

  </class>

</hibernate-mapping>

これは私の呼び出し場所です:

     public class UserDAO {
    private Session session = null;

    public UserDAO() {
        session =  HibernateUtil.currentSession();
    }

     public List<User> getAllUsers() {
        Transaction tn = session.beginTransaction();
        List<User> users = session.createQuery("from crmusers cu order by cu.UserID").list();
        System.out.println("==" + users.size());
        tn.commit();
        return users;
    }


     public static void main(String[] args){
         UserDAO userDAO = new UserDAO();
         userDAO.getAllUsers();
     }
}

これは私のプロジェクト フォルダーの構造体です。 ここに画像の説明を入力

私のコードで何が問題なのか教えてください。

前もって感謝します..

4

6 に答える 6

2

User.hbm.xml ではtype="java.lang.String"、(大きな 'S' を使用して) 使用する必要があります。それでおしまい。

于 2012-10-18T10:18:51.663 に答える
1

「string」と「java.lang.String」はどちらもorg.hibernate.type.StringTypeのエイリアスであるため、どちらもネーミングタイプの観点から機能するはずです。

実際、問題がユーザーのマッピングにあるかどうかはわかりません。そのマッピングはうまく見えます。その例外に基づいて、私はあなたがどこかにいることをもっと期待します

<composite-id ... class="string">

また

<component ... class="string">

またはそのようなもの。

于 2012-10-18T13:18:08.040 に答える
1

うーん、あなたが持っているマッピングファイルに

<key-property name="businessUnit" column="BusinessUnit" type="string"/>
<key-property name="userID" column="UserID" type="string"/>

代わりにそうすべき...type="java.lang.String"...ですが、ほとんどの場合、実際には必要ありません。Hibernate は (通常は非常に優れた) 知識に基づいた推測を行います。

乾杯、

于 2012-10-18T10:22:04.700 に答える
1
<composite-id name="userPK" >
       <key-property name="businessUnit" column="BusinessUnit" type="String"/>
       <key-property name="userID" column="UserID" type="String"/>
  </composite-id>

文字列を文字列に変更してみてください

于 2014-04-02T15:03:49.890 に答える
1

あなたのコードの問題はUser.hbm.xmlマッピング ファイルが原因であると理解しています。複合 IDタブのtype="string"属性でより正確にします。

タイプ属性を必須にする必要はないことを理解しているので、まったくスキップしてみてください。hibernate はそれを自動的に検出する必要があります。複合キーを使用したことがないため、最後の文はよくわかりませんが、人々が型を明示的に定義していない例はたくさんあります。

于 2012-10-18T10:20:01.643 に答える
1

Hibernate は を使用しreflectionて でマッピング タイプを決定しruntimeます。あなたのマッピングは正しいようですが、それでも同じ問題が発生する場合。当分の間、email、businessUnit、userId などのすべてのタイプ プロパティからテストを削除することをお勧めします。type attributeString

すべてのString型プロパティに対してこの方法を試してください

       <property name="email">
          <column name="Email"/>
        </property>

またはあなたも試すことができjava.lang.Stringます

       <property name="email" type="java.lang.String">
          <column name="Email"/>
        </property>
于 2012-10-18T11:11:31.017 に答える