Hibernate의 동작이 NHibernate의 for a particular usage scenario과 다른지를 조사하기 위해, Hibernate 포트를 Hibernate 포트로 작성하기 시작했다. 엔터티 (여기서 해당 SQL Server 2008 R2 Express 테이블은 기본 키에 uniqueidentifier
을 사용합니다.)uniqueidentifier 기본 키를 가진 엔티티 획득 문제
<!-- 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;
}
//...
그리고 주요 코드 : 여기
은 매핑 파일의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"));
문제는 세션 번호로 전화가 수익을 얻을 수 있다는 것입니다 null
, 기본 키에 대한 사용자 엔터티를 찾지 못함. Hibernate가 값 '2c6d8085f...
을 유도하는 방법
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
나도 몰라, 그러나 이것은 내가 기대하는 것이 바인딩 값이 아닙니다, 그것은에서 사용자 개체를 방지 : 나는 전체 로깅을 사용하도록 설정하면
, 나는 참조 위치한다. 내가 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
방법 최대 절전 모드에서 '2c6d8085f...
값을 계산하여 UUID '473D248D-8D91-41C9-BD73-8ACA45539D79'
에 바인딩 했습니까? 대신 실제 UUID 값을 바인드 할 수 있습니까?
@Type (type = "uuid-char") 주석을 사용하는 사람들은 – sMaN