Nel mio modello di dominio Ho un associazione bi-directionnel tra l'entità ProductList e l'entità del prodotto con il seguente mapping Hibernate:Come aggiungere un prodotto in un elenco senza caricare tutto il database?
@Entity @Indexed
@Table(name="product_list")
public class ProductList {
@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name = "list_items",
inverseJoinColumns = { @JoinColumn(name = "product_id")},
joinColumns = { @JoinColumn(name = "list_id")})
@IndexColumn(name = "item_index", base = 1, nullable = false)
@LazyCollection(LazyCollectionOption.EXTRA)
@BatchSize(size=50)
private List<Product> products = new LinkedList<Product>();
....
}
@Entity
@Table(name="logical_item")
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
public class Product {
@ManyToMany(fetch=FetchType.LAZY, mappedBy="products")
private Set<ProductList> productLists = new LinkedHashSet<ProductList>();
...
}
Ma quando ho cercato di aggiungere un prodotto ad un persistente ProductList Hibernate provare a caricare tutto il prodotto nella lista prima! Ho più di 14000 prodotti in una lista!
Product item = (Product) session.get(Product.class, 123);
ProductList myFavoriteItems = (ProductList) session.get(ProductList.class, 321);
// Evil lazy loading (need more 512Mo of memory)
myFavoriteItems.addItem(Product item);
public void addItem(Product item){
this.getProducts().add(item);
item.getProductLists().add(this);
}
Come aggiungere un prodotto in un elenco senza caricare tutto il database?
Grazie per il tuo post! Aggiungi un'entità per la relazione tra l'elenco e il prodotto è una buona idea che risolve il problema dell'inserto. Ma il mio obiettivo è creare un elenco ordinato di prodotti (@IndexColumn). Sai come gestire l'indice degli oggetti nella nuova entità? –