En mi modelo de dominio que tienen una asociación bi-directionnel entre la entidad la lista de productos y la entidad del producto con la siguiente asignación de hibernación:¿Cómo agregar un producto en una lista sin cargar toda la base de datos?
@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>();
...
}
Pero cuando traté de añadir un producto a un persistente Lista del producto Hibernate intentará cargar todo el producto en la lista antes! ¡Tengo más de 14 000 productos en 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);
}
¿Cómo agregar un producto en una lista sin cargar toda la base de datos?
Gracias por tu mensaje! Agregar una entidad para la relación entre la lista y el producto es una muy buena idea que resuelve el problema de inserción. Pero mi objetivo es crear una lista de productos ordenada (@IndexColumn). ¿Sabía cómo administrar el índice del artículo en la nueva entidad? –