Thanks!

On 22 April 2016 at 07:39, Óscar Bou - GOVERTIS <[email protected]> wrote:

> 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!
>>
>>
>>
>>
>

Reply via email to