Для разработки Windows я использовал Проверку программного обеспечения Блок проверки допустимости Производительности - это быстро, довольно точно, и по умеренной цене. Лучше всего все же это может оснастить рабочий процесс и позволяет Вам включить и выключить сбор данных во времени выполнения, и вручную и на основе стека вызовов - большой для профилирования маленького раздела большей программы.
Это можно сделать, установив accesstype поля ID в "свойство". например:
@Entity
public class Foo {
// the id field is set to be property accessed
@Id @GeneratedValue @AccessType("property")
private long id;
// other fields can use the field access type
@Column private String stuff;
public long getId() { return id; }
public void setId(long id) { this.id = id; }
String getStuff() { return stuff; }
// NOTE: we don't need a setStuff method
}
Это объясняется здесь . Таким образом, поле id всегда заполняется при создании прокси.
Если все, что вы хотите вернуть, это идентификатор объекта, я представляю вызов getID (), а затем синтаксический анализ int / long, поскольку значение String в тот момент, когда вы хотите, чтобы оно отображалось, будет работать просто хорошо. По крайней мере, так кажется на основании вопроса.
РЕДАКТИРОВАТЬ
Как решить LazyInitializationException с использованием JPA и Hibernate
После просмотра комментария и некоторого поиска я считаю, что это может быть наиболее полезным для вашего сценария.
Я нашел обходной путь:
public static String getId (DBObject dbo)
{
if (dbo == null)
return "null";
if (dbo instanceof HibernateProxy)
{
HibernateProxy proxy = (HibernateProxy)dbo;
LazyInitializer li = proxy.getHibernateLazyInitializer();
return li.getIdentifier ().toString ();
}
try
{
return Long.toString (dbo.id ());
}
catch (RuntimeException e)
{
return "???";
}
}
Итак, этот код извлекает идентификатор (64-битное число) из объекта. DBObject
- это интерфейс, который определяет long id ()
. Если объект является прокси Hibernate, я обращаюсь к его LazyInitializer
, чтобы получить идентификатор. В противном случае я вызываю id ()
. Использование:
class Parent {
DBObject child;
public String toString () {
return "Parent (id=..., child=" + getId(child)+")");
}
}