Hibernateの動作がNHibernateの動作と異なるかどうかを調べるために、NHibernateベースのアプリケーションの関連部分のJava SE & Hibernateポートを作成し始めました。エンティティで、対応するSQL Server 2008 R2 Expressテーブルでプライマリキーにuniqueidentifier
が使用されています。uniqueidentifier主キーを持つエンティティを取得する問題
ここでは、マッピング・ファイルです:問題は、セッション#への呼び出しがリターンを得ることである
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
SessionFactory sessionFactory = HibernateUtil.getSessionFactory();
Session session = sessionFactory.openSession();
User currentUser = (User) session.get(User.class, UUID.fromString("473D248D-8D91-41C9-BD73-8ACA45539D79"));
:
<!-- User.hbm.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="hibernatetest.entity.User" table="aspnet_Users">
<id name="Id">
<column name="UserId" sql-type="uniqueidentifier" not-null="true" />
</id>
<!-- ... -->
と、対応するPOJOの定義:
// hibernatetest/entity/User.java
package hibernatetest.entity;
import java.util.UUID;
public class User {
private UUID id;
public UUID getId() {
return id;
}
public void setId(UUID id) {
this.id = id;
}
//...
そしてメインコードnull
、プライマリキーのユーザエンティティが見つからないため。
私は完全なログを有効にすると、私は次を参照してください。
DEBUG [main] (AbstractBatcher.java:401) - select user0_.UserId as UserId0_0_ from aspnet_Users user0_ where user0_.UserId=?
Hibernate: select user0_.UserId as UserId0_0_ from aspnet_Users user0_ where user0_.UserId=?
TRACE [main] (NullableType.java:133) - binding '2c6d8085f3f2808eeae1f6e1aef5f4e9ecaed5d5c9c43c19837718ed05af828082ca808cece5e1f3f4d3e9e7c2e9f4f3ca808bedeff3f4d3e9e7c2e9f4f3f8f03df30a4ac5d31df9c7bda40d0d11c149' to parameter: 1
私はHibernateは値'2c6d8085f...
を導出が、これは私が期待することを結合値ではなく、それからユーザエンティティを防ぐ方法がわかりません位置している。
私は、この行は実体を見つけることに成功し、String
へjava.util.UUID
からhibernatetest.entity.User
のid
フィールドの種類を変更する場合:
User currentUser = (User) session.get(User.class, "473D248D-8D91-41C9-BD73-8ACA45539D79");
、ログ出力は次のようになります。
どうDEBUG [main] (AbstractBatcher.java:401) - select user0_.UserId as UserId0_0_ from aspnet_Users user0_ where user0_.UserId=?
Hibernate: select user0_.UserId as UserId0_0_ from aspnet_Users user0_ where user0_.UserId=?
TRACE [main] (NullableType.java:133) - binding '473D248D-8D91-41C9-BD73-8ACA45539D79' to parameter: 1
HibernateはUUID '473D248D-8D91-41C9-BD73-8ACA45539D79'
のためにバインドする値'2c6d8085f...
を計算しましたか?代わりに、実際のUUID値を代わりにバインドさせることができますか?
注釈@Type(type = "uuid-char") ' – sMaN