Java 类org.hibernate.type.IdentifierType 实例源码
项目:hql-builder
文件:HqlServiceImpl.java
@SuppressWarnings("unchecked")
@Override
public <T extends Serializable, I extends Serializable> T get(Class<T> type, I id) {
Object idv = id;
String name = type.getName();
ClassMetadata classMetadata = (ClassMetadata) new MetadataResolver().getAllClassMetadata(sessionFactory).get(name);
String oid = classMetadata.getIdentifierPropertyName();
if (id instanceof String) {
IdentifierType<?> identifierType = (IdentifierType<?>) classMetadata.getIdentifierType();
if (!(identifierType instanceof StringType)) {
try {
idv = identifierType.stringToObject((String) id);
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
}
QueryParameters hql = new QueryParameters("from " + name + " where " + oid + "=:" + oid,
new QueryParameter().setName(oid).setValueTypeText(idv));
logger.debug("hql={}", hql);
List<Serializable> value = execute(hql).getResults().getValue();
return (T) (value.isEmpty() ? null : value.get(0));
}