我使用 Hibernate/JPA 作为持久性后端,本质上归结为一个用 Java 编写的游戏的 mod。
在这种情况下,在主线程上尽可能少地查询数据库对我来说非常重要。尽管可能,但异步执行此操作是不切实际的,因为我必须从其他线程调用游戏对象的方法,而这通常不起作用。这意味着我必须使用缓存对象在内存中做尽可能多的事情,以最大限度地提高性能(因为使用内存比等待查询从数据库返回结果要快)。
假设我有如下定义的实体:
@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 检索所有 Resident 实体,并将它们存储在内存中(例如,使用 HashMap ),然后如果我要继续使用 Hibernate 检索所有 Town 实体并以相同的方式缓存它们,将调用Town#getResidents()返回引用内存中的某些对象与驻留缓存中的对象相同吗?
本质上,Hibernate 是否重用之前在查询中返回的仍然有效的对象来填充新创建的集合?
我也不反对对我的一般方法或关于如何改进它的建议的任何批评。先感谢您!:)
qq_遁去的一_1
波斯汪
慕慕森
相关分类