Получение идентификатора связанного объекта без извлечения его из базы данных (платформа Play) - PullRequest
1 голос
/ 04 сентября 2010

Допустим, у меня есть две модели:

public class City extends Model
{
    @ManyToOne
    private Country country;
}

public class Country extends Model
{
}

У меня есть объект City и я хочу узнать идентификатор соответствующей страны.Я мог бы извлечь из базы данных, выполнив city.getCountry().getId(), но это кажется очень расточительным.Как я могу просто получить идентификатор (хранится в таблице базы данных как country_id)?

1 Ответ

2 голосов
/ 04 сентября 2010

Я думаю fetchType = LAZY - это то, что вам нужно.Он создает прокси-объект для страны, и он не должен выполнять никаких запросов, запрашивая идентификатор.

@OneToOne(fetch = FetchType.LAZY)
private Country country;

Но вам также нужно пометить ваш идентификатор-получатель в стране.

public class Country extends Model
{
    @Id
    public Long getId()
    {
        return id;
    }
}

Если вы не хотите менять свои id-аннотации, вы также можете использовать этот обходной путь:

  Serializable id = ((HibernateProxy) country).getHibernateLazyInitializer().getIdentifier()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...