Sure! Equivalent "removeAndFlush" is needed for same reasons.
I'll create a PR including docs. > El 22 abr 2016, a las 8:26, Dan Haywood <[email protected]> > escribió: > > Hi Oscar (cc'ing dev) > > That seems reasonable to me. I think the method name you've suggested is > fine too. > > Would you raise a PR? Could it also include an update to > _rgsvc_api_RepositoryService.adoc to explain the rationale, perhaps with this > example (or similar). > > Thanks! > > Dan > > >> On 20 April 2016 at 16:19, Óscar Bou - GOVERTIS <[email protected]> wrote: >> >> Hi, Dan. >> >> I’m considering adding this method, complementing current >> “RepositoryService#persist(…)”. >> >> I think it will ease life for newcomers, as the “flush()” invokation is >> needed for DataNucleus to update “mappedBy” collections, for example, when a >> new element has been added. >> >> For Queries, we’re currently invoking always flush(…) before executing it on >> the persistence layer, but that’s not the default behavior when DN reloads >> entities so collections would not be updated. >> >> With an example, I have: >> >> public abstract class Warehouse extends SalesVIPEntity<Marketplace> { >> >> // {{ ExcludedProducts (Collection) >> @Persistent(mappedBy = "marketplace", dependentElement = "true") >> private SortedSet<MarketplaceExcludedProduct> excludedProducts = new >> TreeSet<MarketplaceExcludedProduct>(); >> >> @MemberOrder(sequence = "1") >> public SortedSet<MarketplaceExcludedProduct> getExcludedProducts() { >> return this.excludedProducts; >> } >> >> public void setExcludedProducts( >> final SortedSet<MarketplaceExcludedProduct> excludedProducts) { >> this.excludedProducts = excludedProducts; >> } >> >> // }} >> >> // {{ addExcludedProduct (action) >> @Action(semantics = SemanticsOf.IDEMPOTENT) >> @MemberOrder(sequence = "1") >> public MarketplaceExcludedProduct addExcludedProduct(final Product >> product) { >> MarketplaceExcludedProduct marketplaceExcludedProduct = this >> .findExcludedProduct(product); >> if (marketplaceExcludedProduct == null) { >> marketplaceExcludedProduct = this.factoryService >> .instantiate(MarketplaceExcludedProduct.class); >> } >> >> this.wrap(marketplaceExcludedProduct).setMarketplace(this); >> this.wrap(marketplaceExcludedProduct).setProduct(product); >> >> this.persistAndFlush(marketplaceExcludedProduct); <————————————— >> >> return marketplaceExcludedProduct; >> } >> >> // }} >> >> // {{ deleteFromExcludedProducts (action) >> @Action(semantics = SemanticsOf.IDEMPOTENT) >> @MemberOrder(sequence = "1") >> public void deleteFromExcludedProducts(final Product product) { >> final MarketplaceExcludedProduct marketplaceExcludedProduct = this >> .findExcludedProduct(product); >> if (marketplaceExcludedProduct != null) { >> this.repositoryService.remove(marketplaceExcludedProduct); >> this.flushTransaction(); >> } >> } >> >> // }} >> >> // {{ findExcludedProduct (action) >> @Action(semantics = SemanticsOf.SAFE) >> @MemberOrder(sequence = "1") >> public MarketplaceExcludedProduct findExcludedProduct(final Product >> product) { >> return this.repositoryService.firstMatch(QueryDefault.create( >> MarketplaceExcludedProduct.class, >> "findByMarketplaceAndProduct", "marketplace", this, "product", >> product)); >> } >> >> // }} >> >> // {{ findAllProductsExcluded (action) >> @Action(semantics = SemanticsOf.SAFE, hidden = Where.EVERYWHERE) >> public Set<Product> findAllProductsExcluded() { >> >> return this.getExcludedProducts().stream().map(mep -> mep.getProduct()) >> .collect(Collectors.toSet()); >> >> } >> >> // }} >> >> } >> >> >> On the “addExcludedProduct()” action, if I don’t flush, this test would >> fail, not containing the given product: >> >> @Test >> public void addExcludedProduct() { >> >> // given >> final AmazonMarketplace amazonMarketplace = this.wrapSkipRules( >> this.marketplaceRepository).findOrCreateAmazonMarketplace( >> AmazonMarketplaceLocation.FRANCE); >> >> final Product product = this.wrap(this.productRepository) >> .createProduct(UUID.randomUUID().toString(), >> UUID.randomUUID().toString()); >> >> // when >> this.wrap(amazonMarketplace).addExcludedProduct(product); >> >> // then >> >> Assertions.assertThat(this.wrapSkipRules(amazonMarketplace).findAllProductsExcluded()).contains(product); >> >> } >> >> >> >> Do you think is it ok to proceed? >> >> Any considerations? >> >> Thanks! >
