Я использую Hibernate / JPA в качестве бэкэнда персистентности того, что по сути сводится к моду игры, написанной на Java.
В этом контексте для меня очень важно, чтобы я запрашивал базу данных каккак можно реже на главном потоке.Делать это асинхронно, хотя это возможно, было бы нецелесообразно, поскольку мне пришлось бы вызывать методы игровых объектов из других потоков, которые чаще всего не будут работать.Это означает, что я должен сделать как можно больше вещей в памяти, используя кэшированные объекты, насколько это возможно, чтобы максимизировать производительность (поскольку работа с памятью была бы быстрее, чем ожидание запроса для возврата результатов из базы данных).
Скажем, у меня есть сущности, определенные следующим образом:
@Entity
class Town {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@OneToMany(mappedBy = "town", fetch = FetchType.EAGER) // use eager fetching to save on having to query the database later for this
private Set<Resident> residents;
// ... other fields and associated getters/setters
}
@Entity
class Resident {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@ManyToOne(fetch = FetchType.EAGER) // use eager fetching to save on having to query the database later for this
@JoinColumn(name = "town_id")
private Town town;
// ... otehr fields and associated getters/setters
}
У меня такой вопрос:
Если бы мне пришлось извлекать все резидентные сущности с помощью Hibernate и сохранять их в памяти (скажем,используя HashMap), и если бы я затем продолжил извлекать все сущности Town, используя Hibernate, и кэшировать их таким же образом, вызовет Town#getResidents()
возвратит ссылки на некоторые из тех же объектов в памяти, которые присутствуют в Residentкэш ?
По сути, использует ли Hibernate все еще действительные объекты, которые ранее были возвращены в запросах для заполнения вновь созданных коллекций?
Я также не был бы против любой критикимой общий подход или совет о том, как я мог бы улучшить его.Заранее спасибо!:)