Как я реализую toString () в классе, который отображается с, в спящем режиме?

Для разработки Windows я использовал Проверку программного обеспечения Блок проверки допустимости Производительности - это быстро, довольно точно, и по умеренной цене. Лучше всего все же это может оснастить рабочий процесс и позволяет Вам включить и выключить сбор данных во времени выполнения, и вручную и на основе стека вызовов - большой для профилирования маленького раздела большей программы.

7
задан Aaron Digulla 12 November 2009 в 13:01
поделиться

3 ответа

Это можно сделать, установив 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 всегда заполняется при создании прокси.

6
ответ дан 7 December 2019 в 05:24
поделиться

Если все, что вы хотите вернуть, это идентификатор объекта, я представляю вызов getID (), а затем синтаксический анализ int / long, поскольку значение String в тот момент, когда вы хотите, чтобы оно отображалось, будет работать просто хорошо. По крайней мере, так кажется на основании вопроса.

РЕДАКТИРОВАТЬ

Как решить LazyInitializationException с использованием JPA и Hibernate

После просмотра комментария и некоторого поиска я считаю, что это может быть наиболее полезным для вашего сценария.

0
ответ дан 7 December 2019 в 05:24
поделиться

Я нашел обходной путь:

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)+")");
    }
}
1
ответ дан 7 December 2019 в 05:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: