Я пытаюсь спроектировать запрос с использованием API критериев гибернации. Цель состоит в том, чтобы получить отфильтрованный список элементов, хранящихся на 3-м уровне, в виде java.util.Set, которые соответствуют определенному значению. Далее список должен быть отфильтрован на внешнем самом уровне для другого конкретного значения. Ниже приведены модельные классы, которые формируют отношения с многоуровневой:Как создать критерии спящего режима для нескольких уровней
Seller.java
@Entity
@Table(name="seller")
public class Seller {
private Integer id;
private Set<Store> stores;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="seller_store",
joinColumns={@JoinColumn(name="sellertid")},
inverseJoinColumns={@JoinColumn(name="storeid", referencedColumnName="id")})
@ForeignKey(name="fk_sellerid_seller_store", inverseName="fk_storeid_seller_store")
public Set<Store> getStores() {
return stores;
}
public void setStores(Set<Store> stores) {
this.stores = stores;
}
}
Store.java
@Entity
@Table(name="store")
public class Store {
private Integer id;
private Stock stock;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
@OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER, orphanRemoval=true)
@JoinColumn(name="stockid", referencedColumnName="id")
@ForeignKey(name="fk_stockid_store")
public Stock getStock() {
return stock;
}
public void setStock(Stock stock) {
this.stock = stock;
}
}
Stock.java
@Entity
@Table(name="stock")
public class Stock {
private Integer id;
private Set<Item> stockItems;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
@ManyToMany(fetch=FetchType.EAGER, cascade=CascadeType.ALL)
@JoinTable(name="stock_stockitem",
joinColumns={@JoinColumn(name="stockid")},
inverseJoinColumns={@JoinColumn(name="stockitemid")})
@ForeignKey(name="fk_stockid_stock", inverseName="fk_stockitemid_stock")
public Set<Item> getStockItems() {
return stockItems;
}
public void setStockItems(Set<Item> stockItems) {
this.stockItems = stockItems;
}
}
Элемент .java
@Entity
@Table(name="item")
public class Item {
private Integer id;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id", unique=true, nullable=false)
public Integer getId(){
return id;
}
public void setId(Integer id){
this.id = id;
}
@Column(name="name", unique=true)
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
}
Теперь мне нужно получить определенный Stock объект, содержащий Пункт S с определенным идентификатором и, что тоже для Продавец с определенным идентификатором. Я мог бы легко сделать это, получив верхний уровень Продавец объект по id, но это повлечет за собой нагрузку на мой код, чтобы вручную отфильтровать список генераторов Stock с несколькими для циклов, что определенно не очень хорошая идея. Любые предложения и рекомендации для картографирования и/или критериев будут наиболее оценены. Спасибо заранее!
Может ли кто-нибудь помочь в этом, пожалуйста? – Sachin