Получение идентификатора связанного объекта без получения его из базы данных (Play Framework)

StackOverflow https://stackoverflow.com/questions/3642130

  •  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()
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top