ひがやすを技術ブログ

電通国際情報サービスのプログラマ

S2JDBC & Hibernateベンチマーク その2

今度は、Addressを10000件取得してみます。Addressは、EmployeeとOneToOneの関連があり、外部キーを持たない非所有者側のエンティティです。

  • S2JDBC(0.453489233)
    • 0.454608859
    • 0.451351731
    • 0.454507110
  • Hibernate(26.278606800)
  • 26.353926022
  • 26.258951969
  • 26.222942410

Hibernateは、S2JDBCより約58倍時間がかかっています。HibernateはOneToOneの非所有者側のエンティティを取得するのは苦手です。10001回のSQLを発行してしまうのです。
下記のSQLは最初に1回発行されます。


select
address0_.ADDRESS_ID as ADDRESS1_1_,
address0_.STREET as STREET1_,
address0_.VERSION as VERSION1_
from
Address address0_
その後に、下記のSQLが10000回発行されてしまうのです。

select
employee0_.EMPLOYEE_ID as EMPLOYEE1_2_0_,
employee0_.EMPLOYEE_NO as EMPLOYEE2_2_0_,
employee0_.EMPLOYEE_NAME as EMPLOYEE3_2_0_,
employee0_.MANAGER_ID as MANAGER9_2_0_,
employee0_.HIREDATE as HIREDATE2_0_,
employee0_.SALARY as SALARY2_0_,
employee0_.department_id as department8_2_0_,
employee0_.ADDRESS_ID as ADDRESS7_2_0_,
employee0_.VERSION as VERSION2_0_
from
Employee employee0_
where
employee0_.ADDRESS_ID=?
Addressにあるemployeeプロパティの設定が必要かどうかを外部キーの存在でチェックできないので、わざわざとりに行ってしまうのです。