Получение идентификатора связанного объекта без получения его из базы данных (Play Framework)
-
30-09-2019 - |
Вопрос
Скажем, у меня есть эти две модели:
public class City extends Model
{
@ManyToOne
private Country country;
}
public class Country extends Model
{
}
У меня есть городской объект и хочу знать, что связанная идентификация страны. Я мог бы извлечь из базы данных, делая city.getCountry().getId()
Но это кажется очень расточительным. Как я могу просто получить идентификатор (хранится в таблице базы данных, как country_id
)?
Решение
Я думаю, что fetchtype = ленивый это то, что вам нужно. Это создает прокси-объект для страны, и он не должен делать какие-либо вопросы, запросив ID.
@OneToOne(fetch = FetchType.LAZY)
private Country country;
Но вам также нужно отметить свой ID-Gotter в стране.
public class Country extends Model
{
@Id
public Long getId()
{
return id;
}
}
Если вы не хотите, чтобы изменить свои идентификационные аннотации, вы также можете использовать этот обходной путь:
Serializable id = ((HibernateProxy) country).getHibernateLazyInitializer().getIdentifier()
Не связан с StackOverflow