I have a many-to-many relationship between Stores and Products, represented by the following code (mostly based in this answer):
@Entity
@Table(name = "Store")
public class Store {
    private long idStore;
    // ...
    private Collection<StoreHasProduct> storeHasProducts = new ArrayList<>();
    @OneToMany(mappedBy = "store", cascade = {CascadeType.MERGE, CascadeType.PERSIST}, fetch = FetchType.EAGER)
    public Collection<StoreHasProduct> getStoreHasProducts() {
        return storeHasProducts;
    }
    public void setStoreHasProducts(Collection<StoreHasProduct> storeHasProducts) {
        this.storeHasProducts = storeHasProducts;
    }
}
@Entity
@Table(name="Product")
public class Product {
    private long idProduct;
    // ...
    private Collection<StoreHasProduct> storeHasProducts = new ArrayList<>();
    @OneToMany(mappedBy = "product", fetch = FetchType.LAZY)
    public Collection<StoreHasProduct> getStoreHasProducts() {
        return storeHasProducts;
    }
    public void setStoreHasProducts(Collection<StoreHasProduct> storeHasProducts) {
        this.storeHasProducts = storeHasProducts;
    }
}
@Entity
@Table(name = "Store_has_Product")
@IdClass(StoreHasProductPK.class)
public class StoreHasProduct implements java.io.Serializable {
    @Id
    @ManyToOne
    @JoinColumn(name = "Store_idStore",updatable = true)
    private Store store;
    @Id
    @ManyToOne
    @JoinColumn(name = "Product_idProduct", updatable = true)
    private Product product;
}
public class StoreHasProductPK implements java.io.Serializable {
    private Long store;
    private Long product;
}
All basic insertion are working fine. However, when I try to add new Products to a existing Store I'm having a PersistentObjectException: detached entity passed to persist exception. This happens, for example, in the following test:
@Test
    public void testAssignProductToAnExistingStore() throws Exception {
        //Create a store
        Store store = getStore();
        //Create and save a product
        Product product = getProduct();
        StoreHasProduct storeHasProduct = getStoreHasProduct(store, product);
        store.getStoreHasProducts().add(storeHasProduct);
        storeRepository.save(store);
        //Create and save a second product
        Product productTwo = getProduct();
        Store s = storeRepository.findOne(store.getIdStore());
        product.getStoreHasProducts().add(getStoreHasProduct(s, productTwo));
        productRepository.save(product);
//        s.getStoreHasProducts().add(getStoreHasProduct(s, productTwo));
//        storeRepository.save(s);
    }
If I try to persist the product, I get detached entity passed to persist: Product. If instead I try to persist the store (commented code) I get the same exception but for store.
What should I do? I'm trying to use the CASCADE.DETACH, but I'm not sure if this is the appropriate path to follow.
Thanks