ssc*_*ep3 11 java entity hibernate jpql spring-data
在实体之间的双向映射(例如@ManyToOne↔ @OneToMany)中,对方需要在每次更改时进行同步,尤其是在使用第二级缓存时.这通常使用辅助方法完成.如果Many部件包含大量条目,那么这些辅助方法不能很好地执行,因为每次都会获取整个集合.一个简单的例子是一个实体Store,它有n Products,但n非常大.添加新Product的Store将需要Store获取整个列表Products,终于将其添加到组(见下面的代码示例).
有人可能会争辩说,在对这种关系进行建模时,可以更好地用从单向关联Product来表示Store.我们在应用程序中使用了很多JPQL查询.在JPQL中,从双方加入实体非常方便.
你@OneToMany在Store实体中映射关系时是否看到任何问题,Many实际上意味着很多而不仅仅是少数几个,只要让整个关系被懒惰地取出,只是让字段保密,没有getter和setter?据我所知,Hibernate只需要字段来映射关系.如果该集是私有的,那么不会出现性能问题?
该Product实体:
@Entity
@Table(name = "product")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Product {
@ManyToOne(fetch = FetchType.LAZY)
private Store store;
// setter, getter, helper methods
}
Run Code Online (Sandbox Code Playgroud)
该Store实体:
@Entity
@Table(name = "store")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Store {
@OneToMany(mappedBy = "products", fetch = FetchType.LAZY)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Product> products;
// setter, getter, helper methods
}
Run Code Online (Sandbox Code Playgroud)
不,它没有任何问题,这也是我经常使用的一种技术。当然,只需确保在某些上下文中不会反射性地访问该字段(例如自动toString构建器和您可能正在使用的类似实用程序)。
此外,您不需要@Cache注释,因为您永远不会访问该集合,因此它永远不会被缓存。
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |