Web システムでいくつかのメンテナンスを行いました。このシステムは Java、Struts2、および Hibernate 3 で行われました。私の顧客から緊急に求められた項目の 1 つは、ログインが非常に遅いため、修正することでした。
ユーザーがいつログインしたかを特定できました.Hibernateは、ログインとは関係のないさまざまなテーブルでデータベースに対して多くのクエリを生成します.
私の関係は 3 つのテーブルです: User、Student、Teacher
学生
- ID
- 名前
先生
- ID
- 名前
ユーザー
- ID
- ログイン
- パスワード
学生がログインするたびに、クエリは正しいログインとパスワードであるかどうか、および ID が Student テーブルに存在するかどうかを確認します。ご覧のとおり、Student テーブルの ID_USER などの外部キー ID はありません。
私のクエリ:
Student student =(Student)session.createCriteria(Student.class)
.add( Property.forName("login").eq(login) )
.add( Property.forName("password").eq(password) )
.setMaxResults(1)
.uniqueResult();
- Student は User から継承します...
私の User.hbm.xml
...
<class name="com.xxx.User" table="TBL_USERS" discriminator-value="0" lazy="true">
    <id name="id" column="ID">
     <generator class="sequence">
         <param name="sequence">seq_users</param>
     </generator>
    </id>
    <discriminator column="TYPE" insert="true" />
    <subclass name="com.xxx.Student" discriminator-value="1" lazy="true">
      <join table="TBL_STUDENTS">
         <key column="ID"/>
            <property name="name" column="NAME"/>
      </join>
     </subclass>
     <subclass name="com.xxx.Teacher" discriminator-value="2" lazy="true">
        <join table="TBL_TEACHERS">
           <key column="ID" />
               <property name="name" column="NAME"  />
        </join>
     </subclass>
...
私のHibernateログには、次のような多くの奇妙なクエリが記録されています。
ログイン アクションが遅いため、20 以上の異なるテーブルで発生し、常に繰り返されています。しかし、なぜそれが起こっているのかわかりません.Hibernateの経験はあまりありません.
休止状態:
select
      exerc0_.ID_CLASS as ID6_1_,
      exerc0_.ID as ID1_,
      exerc0_.ID as ID14_0_,
      exerc0_.DATE_ENT as DATA2_14_0_,
        exerc0_.TITLE as TITTLE14_0_,
        exerc0_.TEXT as TEXT14_0_,
        exerc0_.TYPE_EXERC as TYPE5_14_0_,
        exerc0_.ID_CLASS as ID6_14_0_ 
    from
        TBL_EXERC exerc0_ 
    where
        exerc0_.ID_CLASS=?
何が起こっている可能性がありますか?