我有以下两个实体
@Entity
public class Manufacturer {
private int manufacturerId;
private Category category;
private Set<Products> productList;
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER)
@JoinTable(name="manufacturer_products", joinColumns={@JoinColumn(name="manufacturerId")},
inverseJoinColumns={@JoinColumn(name="productId")})
public Set<Product> getProductList() {
return productList;
}
public void setProductList(Set<Product> productList) {
this.productList = productList;
}
@ManyToOne
@JoinColumn(name="categoryId")
public Category getCategory() {
return category;
public void setCategory(Category category) {
this.category = category;
}
}
@Entity
public class Product {
private int productId;
private String modelNumber;
private String name;
private String description;
private Category category;
}
我想查找与某个类别相关的制造商。由于产品和制造商之间的关系被急切地初始化,它获取了映射到制造商产品表中的所有制造商实例。另外,请注意输出列表包含同一制造商的多个实例。如果我尝试延迟初始化,那么在这种情况下,它会给我一个 LazyInitialization 异常,或者我需要遍历产品列表并手动获取数据。我试图避免后一种方法,因为那将是一个很好的性能打击。我已经阅读了休眠文档,但找不到任何解决问题的方法。请让我知道我是否缺少任何东西或您是否需要其他任何东西。任何帮助将不胜感激。
这是我的 DAO 类方法,我将带有 Category 的制造商实例传递给它。它基于此进行查找。
public List<Manufacturer> findByCategory(Category instance){
log.debug("Get Manufacturer by Category");
try {
List<Manufacturer> results = (List<Manufacturer>) sessionFactory
.getCurrentSession()
.createCriteria("com.me.ham.core.model.Manufacturer")
.add(Restrictions.eq("category", instance))
.list();
log.debug("findByCategory successful, result size: "
+ results.size());
return results;
} catch (RuntimeException re) {
log.error("findByCategory failed", re);
throw re;
}
}