@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)); }