Repository: incubator-fineract
Updated Branches:
  refs/heads/develop 59825080b -> a462d1461


http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
index ff757d8..15a3e43 100755
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/service/SavingsAccountWritePlatformServiceJpaRepositoryImpl.java
@@ -18,6 +18,25 @@
  */
 package org.apache.fineract.portfolio.savings.service;
 
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_CHARGE_RESOURCE_NAME;
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_RESOURCE_NAME;
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.amountParamName;
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.chargeIdParamName;
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.dueAsOfDateParamName;
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.withHoldTaxParamName;
+import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.withdrawBalanceParamName;
+
+import java.math.BigDecimal;
+import java.math.MathContext;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+
 import org.apache.commons.lang.StringUtils;
 import 
org.apache.fineract.accounting.journalentry.service.JournalEntryWritePlatformService;
 import 
org.apache.fineract.infrastructure.configuration.domain.ConfigurationDomainService;
@@ -88,25 +107,6 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
-import java.math.BigDecimal;
-import java.math.MathContext;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_CHARGE_RESOURCE_NAME;
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.SAVINGS_ACCOUNT_RESOURCE_NAME;
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.amountParamName;
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.chargeIdParamName;
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.dueAsOfDateParamName;
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.withdrawBalanceParamName;
-import static 
org.apache.fineract.portfolio.savings.SavingsApiConstants.withHoldTaxParamName;
-
 @Service
 public class SavingsAccountWritePlatformServiceJpaRepositoryImpl implements 
SavingsAccountWritePlatformService {
 
@@ -673,7 +673,7 @@ public class 
SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi
 
         final SavingsAccountTransaction newTransferTransaction = 
SavingsAccountTransaction.initiateTransfer(savingsAccount,
                 savingsAccount.office(), transferDate, user);
-        savingsAccount.getTransactions().add(newTransferTransaction);
+        savingsAccount.addTransaction(newTransferTransaction);
         
savingsAccount.setStatus(SavingsAccountStatusType.TRANSFER_IN_PROGRESS.getValue());
         final MathContext mc = MathContext.DECIMAL64;
         boolean isInterestTransfer = false;
@@ -705,7 +705,7 @@ public class 
SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi
 
         final SavingsAccountTransaction withdrawtransferTransaction = 
SavingsAccountTransaction.withdrawTransfer(savingsAccount,
                 savingsAccount.office(), transferDate, user);
-        savingsAccount.getTransactions().add(withdrawtransferTransaction);
+        savingsAccount.addTransaction(withdrawtransferTransaction);
         savingsAccount.setStatus(SavingsAccountStatusType.ACTIVE.getValue());
         final MathContext mc = MathContext.DECIMAL64;
         boolean isInterestTransfer = false;
@@ -745,7 +745,7 @@ public class 
SavingsAccountWritePlatformServiceJpaRepositoryImpl implements Savi
 
         final SavingsAccountTransaction acceptTransferTransaction = 
SavingsAccountTransaction.approveTransfer(savingsAccount,
                 acceptedInOffice, transferDate, user);
-        savingsAccount.getTransactions().add(acceptTransferTransaction);
+        savingsAccount.addTransaction(acceptTransferTransaction);
         savingsAccount.setStatus(SavingsAccountStatusType.ACTIVE.getValue());
         if (fieldOfficer != null) {
             savingsAccount.reassignSavingsOfficer(fieldOfficer, transferDate);

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java
index 59827cb..7467c43 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccount.java
@@ -28,6 +28,7 @@ import javax.persistence.Embedded;
 import javax.persistence.Entity;
 import javax.persistence.EnumType;
 import javax.persistence.Enumerated;
+import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -44,8 +45,6 @@ import 
org.apache.fineract.portfolio.common.domain.PeriodFrequencyType;
 import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
 import org.apache.fineract.portfolio.shareproducts.domain.ShareProduct;
 import org.apache.fineract.useradministration.domain.AppUser;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 import org.springframework.data.jpa.domain.AbstractPersistable;
 
 @Entity
@@ -133,8 +132,7 @@ public class ShareAccount extends AbstractPersistable<Long> 
{
     @JoinColumn(name = "savings_account_id", nullable = true)
     private SavingsAccount savingsAccount;
 
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL, mappedBy = "shareAccount", 
orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "shareAccount", 
orphanRemoval = true, fetch=FetchType.EAGER)
     private Set<ShareAccountTransaction> shareAccountTransactions;
 
     @Column(name = "lockin_period_frequency")
@@ -151,8 +149,7 @@ public class ShareAccount extends AbstractPersistable<Long> 
{
     @Column(name = "minimum_active_period_frequency_enum", nullable = true)
     private PeriodFrequencyType minimumActivePeriodFrequencyType;
 
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL, mappedBy = "shareAccount", 
orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "shareAccount", 
orphanRemoval = true, fetch=FetchType.EAGER)
     private Set<ShareAccountCharge> charges;
 
     @Transient

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
index fb79206..186b189 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountTransaction.java
@@ -26,6 +26,7 @@ import java.util.Set;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -33,8 +34,6 @@ import javax.persistence.Table;
 import javax.persistence.Temporal;
 import javax.persistence.TemporalType;
 
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 import org.springframework.data.jpa.domain.AbstractPersistable;
 
 @Entity
@@ -73,8 +72,7 @@ public class ShareAccountTransaction extends 
AbstractPersistable<Long> {
     @Column(name = "is_active", nullable = false)
     private boolean active = true ;
     
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL, mappedBy = 
"shareAccountTransaction", orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = 
"shareAccountTransaction", orphanRemoval = true, fetch=FetchType.EAGER)
     private final Set<ShareAccountChargePaidBy> shareAccountChargesPaid = new 
HashSet<>();
     
     protected ShareAccountTransaction() {

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java
index f14efd5..14cc73a 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProduct.java
@@ -46,8 +46,6 @@ import org.apache.fineract.portfolio.charge.domain.Charge;
 import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType;
 import 
org.apache.fineract.portfolio.shareproducts.data.ShareProductMarketPriceData;
 import org.apache.fineract.useradministration.domain.AppUser;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 import org.joda.time.DateTime;
 
 @Entity
@@ -102,8 +100,7 @@ public class ShareProduct extends 
AbstractAuditableCustom<AppUser, Long> {
     private Long maximumShares;
 
     @OrderBy(value = "fromDate,id")
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL, mappedBy = "product", orphanRemoval 
= true)
+    @OneToMany(cascade = CascadeType.ALL, mappedBy = "product", orphanRemoval 
= true, fetch=FetchType.EAGER)
     Set<ShareProductMarketPrice> marketPrice;
 
     @ManyToMany(fetch = FetchType.EAGER)

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java
index d282899..f429e3d 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductDividendPayOutDetails.java
@@ -26,6 +26,7 @@ import java.util.List;
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
@@ -35,8 +36,6 @@ import javax.persistence.TemporalType;
 import org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom;
 import 
org.apache.fineract.portfolio.shareaccounts.domain.ShareAccountDividendDetails;
 import org.apache.fineract.useradministration.domain.AppUser;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 import org.joda.time.LocalDate;
 
 @Entity
@@ -60,8 +59,7 @@ public class ShareProductDividendPayOutDetails extends 
AbstractAuditableCustom<A
     @Column(name = "status", nullable = false)
     private Integer status;
 
-    @LazyCollection(LazyCollectionOption.TRUE)
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, 
fetch=FetchType.EAGER)
     @JoinColumn(name = "dividend_pay_out_id", referencedColumnName = "id", 
nullable = false)
     private List<ShareAccountDividendDetails> accountDividendDetails = new 
ArrayList<>();
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java
index 32ec96b..8b8ba23 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxComponent.java
@@ -23,12 +23,15 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.ManyToOne;
 import javax.persistence.OneToMany;
@@ -44,8 +47,6 @@ import 
org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom;
 import org.apache.fineract.infrastructure.core.service.DateUtils;
 import org.apache.fineract.portfolio.tax.api.TaxApiConstants;
 import org.apache.fineract.useradministration.domain.AppUser;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 import org.joda.time.LocalDate;
 
 @Entity
@@ -76,14 +77,12 @@ public class TaxComponent extends 
AbstractAuditableCustom<AppUser, Long> {
     @Temporal(TemporalType.DATE)
     private Date startDate;
 
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, 
fetch=FetchType.EAGER)
     @JoinColumn(name = "tax_component_id", referencedColumnName = "id", 
nullable = false)
-    private List<TaxComponentHistory> taxComponentHistories = new 
ArrayList<>();
+    private Set<TaxComponentHistory> taxComponentHistories = new HashSet<>();
 
-    @LazyCollection(LazyCollectionOption.TRUE)
-    @OneToMany(cascade = CascadeType.DETACH, mappedBy = "taxComponent", 
orphanRemoval = false)
-    private List<TaxGroupMappings> taxGroupMappings = new ArrayList<>();
+    @OneToMany(cascade = CascadeType.DETACH, mappedBy = "taxComponent", 
orphanRemoval = false, fetch=FetchType.EAGER)
+    private Set<TaxGroupMappings> taxGroupMappings = new HashSet<>();
 
     protected TaxComponent() {
 
@@ -182,11 +181,11 @@ public class TaxComponent extends 
AbstractAuditableCustom<AppUser, Long> {
         return target != null && target.isAfter(startDate());
     }
 
-    public List<TaxComponentHistory> getTaxComponentHistories() {
+    public Set<TaxComponentHistory> getTaxComponentHistories() {
         return this.taxComponentHistories;
     }
 
-    public List<TaxGroupMappings> getTaxGroupMappings() {
+    public Set<TaxGroupMappings> getTaxGroupMappings() {
         return this.taxGroupMappings;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroup.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroup.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroup.java
index 0e780f3..59c2b34 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroup.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/domain/TaxGroup.java
@@ -20,12 +20,15 @@ package org.apache.fineract.portfolio.tax.domain;
 
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.persistence.CascadeType;
 import javax.persistence.Column;
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.JoinColumn;
 import javax.persistence.OneToMany;
 import javax.persistence.Table;
@@ -36,8 +39,6 @@ import 
org.apache.fineract.infrastructure.core.domain.AbstractAuditableCustom;
 import org.apache.fineract.portfolio.tax.api.TaxApiConstants;
 import org.apache.fineract.portfolio.tax.exception.TaxMappingNotFoundException;
 import org.apache.fineract.useradministration.domain.AppUser;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 
 @Entity
 @Table(name = "m_tax_group")
@@ -46,25 +47,24 @@ public class TaxGroup extends 
AbstractAuditableCustom<AppUser, Long> {
     @Column(name = "name", length = 100)
     private String name;
 
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, 
fetch=FetchType.EAGER)
     @JoinColumn(name = "tax_group_id", referencedColumnName = "id", nullable = 
false)
-    private List<TaxGroupMappings> taxGroupMappings = new ArrayList<>();
+    private Set<TaxGroupMappings> taxGroupMappings = new HashSet<>();
 
     protected TaxGroup() {
 
     }
 
-    private TaxGroup(final String name, final List<TaxGroupMappings> 
taxGroupMappings) {
+    private TaxGroup(final String name, final Set<TaxGroupMappings> 
taxGroupMappings) {
         this.name = name;
         this.taxGroupMappings = taxGroupMappings;
     }
 
-    public static TaxGroup createTaxGroup(final String name, final 
List<TaxGroupMappings> taxGroupMappings) {
+    public static TaxGroup createTaxGroup(final String name, final 
Set<TaxGroupMappings> taxGroupMappings) {
         return new TaxGroup(name, taxGroupMappings);
     }
 
-    public Map<String, Object> update(final JsonCommand command, final 
List<TaxGroupMappings> taxGroupMappings) {
+    public Map<String, Object> update(final JsonCommand command, final 
Set<TaxGroupMappings> taxGroupMappings) {
         final Map<String, Object> changes = new HashMap<>();
 
         if 
(command.isChangeInStringParameterNamed(TaxApiConstants.nameParamName, 
this.name)) {
@@ -106,7 +106,7 @@ public class TaxGroup extends 
AbstractAuditableCustom<AppUser, Long> {
         return null;
     }
 
-    public List<TaxGroupMappings> getTaxGroupMappings() {
+    public Set<TaxGroupMappings> getTaxGroupMappings() {
         return this.taxGroupMappings;
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java
index 6df786e..eecb180 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/serialization/TaxValidator.java
@@ -266,7 +266,7 @@ public class TaxValidator {
         throwExceptionIfValidationWarningsExist(dataValidationErrors);
     }
 
-    public void validateTaxGroupEndDateAndTaxComponent(final TaxGroup 
taxGroup, final List<TaxGroupMappings> groupMappings) {
+    public void validateTaxGroupEndDateAndTaxComponent(final TaxGroup 
taxGroup, final Set<TaxGroupMappings> groupMappings) {
         final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
         final DataValidatorBuilder baseDataValidator = new 
DataValidatorBuilder(dataValidationErrors).resource("tax.group");
 
@@ -293,7 +293,7 @@ public class TaxValidator {
     public void validateTaxGroup(final TaxGroup taxGroup) {
         final List<ApiParameterError> dataValidationErrors = new ArrayList<>();
         final DataValidatorBuilder baseDataValidator = new 
DataValidatorBuilder(dataValidationErrors).resource("tax.group");
-        List<TaxGroupMappings> groupMappings = taxGroup.getTaxGroupMappings();
+        Set<TaxGroupMappings> groupMappings = taxGroup.getTaxGroupMappings();
         validateGroupTotal(groupMappings, baseDataValidator, 
"total.percentage");
         validateOverlappingComponents(groupMappings, baseDataValidator);
         throwExceptionIfValidationWarningsExist(dataValidationErrors);
@@ -318,7 +318,7 @@ public class TaxValidator {
         
baseDataValidator.reset().parameter(TaxApiConstants.startDateParamName).value(startDate).validateDateAfter(existingStartDate);
     }
 
-    private void validateOverlappingComponents(final List<TaxGroupMappings> 
taxMappings, final DataValidatorBuilder baseDataValidator) {
+    private void validateOverlappingComponents(final Set<TaxGroupMappings> 
taxMappings, final DataValidatorBuilder baseDataValidator) {
         for (TaxGroupMappings groupMappingsOne : taxMappings) {
             final List<TaxGroupMappings> mappings = new 
ArrayList<>(taxMappings);
             mappings.remove(groupMappingsOne);
@@ -338,7 +338,7 @@ public class TaxValidator {
         }
     }
 
-    private void validateGroupTotal(final List<TaxGroupMappings> taxMappings, 
final DataValidatorBuilder baseDataValidator,
+    private void validateGroupTotal(final Set<TaxGroupMappings> taxMappings, 
final DataValidatorBuilder baseDataValidator,
             final String paramenter) {
         for (TaxGroupMappings groupMappingsOne : taxMappings) {
             Collection<LocalDate> dates = 
groupMappingsOne.getTaxComponent().allStartDates();

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java
index 1e5ad92..be41011 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxAssembler.java
@@ -20,8 +20,10 @@ package org.apache.fineract.portfolio.tax.service;
 
 import java.math.BigDecimal;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Locale;
+import java.util.Set;
 
 import org.apache.fineract.accounting.glaccount.domain.GLAccount;
 import 
org.apache.fineract.accounting.glaccount.domain.GLAccountRepositoryWrapper;
@@ -114,12 +116,12 @@ public class TaxAssembler {
 
         final String name = 
this.fromApiJsonHelper.extractStringNamed(TaxApiConstants.nameParamName, 
element);
         boolean isUpdate = false;
-        final List<TaxGroupMappings> groupMappings = 
assembleTaxGroupMappingsFrom(command, isUpdate);
+        final Set<TaxGroupMappings> groupMappings = 
assembleTaxGroupMappingsFrom(command, isUpdate);
         return TaxGroup.createTaxGroup(name, groupMappings);
     }
 
-    public List<TaxGroupMappings> assembleTaxGroupMappingsFrom(final 
JsonCommand command, boolean isUpdate) {
-        List<TaxGroupMappings> groupMappings = new ArrayList<>();
+    public Set<TaxGroupMappings> assembleTaxGroupMappingsFrom(final 
JsonCommand command, boolean isUpdate) {
+        Set<TaxGroupMappings> groupMappings = new HashSet<>();
         final JsonElement element = command.parsedJson();
 
         final JsonObject topLevelJsonElement = element.getAsJsonObject();

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java
index 02368df..1acc202 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxUtils.java
@@ -22,6 +22,7 @@ import java.math.BigDecimal;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.fineract.organisation.monetary.domain.MoneyHelper;
 import org.apache.fineract.portfolio.tax.domain.TaxComponent;
@@ -31,7 +32,7 @@ import org.joda.time.LocalDate;
 public class TaxUtils {
 
     public static Map<TaxComponent, BigDecimal> splitTax(final BigDecimal 
amount, final LocalDate date,
-            final List<TaxGroupMappings> taxGroupMappings, final int scale) {
+            final Set<TaxGroupMappings> taxGroupMappings, final int scale) {
         Map<TaxComponent, BigDecimal> map = new HashMap<>(3);
         if (amount != null) {
             final double amountVal = amount.doubleValue();
@@ -51,7 +52,7 @@ public class TaxUtils {
         return map;
     }
 
-    public static BigDecimal incomeAmount(final BigDecimal amount, final 
LocalDate date, final List<TaxGroupMappings> taxGroupMappings,
+    public static BigDecimal incomeAmount(final BigDecimal amount, final 
LocalDate date, final Set<TaxGroupMappings> taxGroupMappings,
             final int scale) {
         Map<TaxComponent, BigDecimal> map = splitTax(amount, date, 
taxGroupMappings, scale);
         return incomeAmount(amount, map);

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxWritePlatformServiceImpl.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxWritePlatformServiceImpl.java
 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxWritePlatformServiceImpl.java
index a96b57d..30ecf26 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxWritePlatformServiceImpl.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/tax/service/TaxWritePlatformServiceImpl.java
@@ -18,8 +18,8 @@
  */
 package org.apache.fineract.portfolio.tax.service;
 
-import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import org.apache.fineract.infrastructure.core.api.JsonCommand;
 import org.apache.fineract.infrastructure.core.data.CommandProcessingResult;
@@ -98,7 +98,7 @@ public class TaxWritePlatformServiceImpl implements 
TaxWritePlatformService {
         this.validator.validateForTaxGroupUpdate(command.json());
         final TaxGroup taxGroup = 
this.taxGroupRepositoryWrapper.findOneWithNotFoundDetection(id);
         final boolean isUpdate = true;
-        List<TaxGroupMappings> groupMappings = 
this.taxAssembler.assembleTaxGroupMappingsFrom(command, isUpdate);
+        Set<TaxGroupMappings> groupMappings = 
this.taxAssembler.assembleTaxGroupMappingsFrom(command, isUpdate);
         this.validator.validateTaxGroupEndDateAndTaxComponent(taxGroup, 
groupMappings);
         Map<String, Object> changes = taxGroup.update(command, groupMappings);
         this.validator.validateTaxGroup(taxGroup);

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
 
b/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
index 7bf9558..d52ede0 100644
--- 
a/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
+++ 
b/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
@@ -52,8 +52,6 @@ import org.apache.fineract.organisation.office.domain.Office;
 import org.apache.fineract.organisation.staff.domain.Staff;
 import org.apache.fineract.portfolio.client.domain.Client;
 import org.apache.fineract.useradministration.service.AppUserConstants;
-import org.hibernate.annotations.LazyCollection;
-import org.hibernate.annotations.LazyCollectionOption;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.data.jpa.domain.AbstractPersistable;
@@ -122,8 +120,7 @@ public class AppUser extends AbstractPersistable<Long> 
implements PlatformUser {
     @Column(name = "is_self_service_user", nullable = false)
        private boolean isSelfServiceUser;
     
-    @LazyCollection(LazyCollectionOption.FALSE)
-    @OneToMany(cascade = CascadeType.ALL,  orphanRemoval = true)
+    @OneToMany(cascade = CascadeType.ALL,  orphanRemoval = true, 
fetch=FetchType.EAGER)
     @JoinColumn(name = "appuser_id", referencedColumnName= "id", nullable = 
false)
     private Set<AppUserClientMapping> appUserClientMappings = new HashSet<>();
 

http://git-wip-us.apache.org/repos/asf/incubator-fineract/blob/9e5e7329/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java
----------------------------------------------------------------------
diff --git 
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java
 
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java
index 5e6ee29..5a10f12 100644
--- 
a/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java
+++ 
b/fineract-provider/src/test/java/org/apache/fineract/portfolio/loanaccount/LoanRepaymentScheduleInstallmentBuilder.java
@@ -18,7 +18,7 @@
  */
 package org.apache.fineract.portfolio.loanaccount;
 
-import java.util.List;
+import java.util.Set;
 
 import org.apache.fineract.organisation.monetary.domain.MonetaryCurrency;
 import org.apache.fineract.organisation.monetary.domain.Money;
@@ -49,7 +49,7 @@ public class LoanRepaymentScheduleInstallmentBuilder {
     }
 
     public LoanRepaymentScheduleInstallment build() {
-        final List<LoanInterestRecalcualtionAdditionalDetails> 
compoundingDetails = null;
+        final Set<LoanInterestRecalcualtionAdditionalDetails> 
compoundingDetails = null;
         final LoanRepaymentScheduleInstallment installment = new 
LoanRepaymentScheduleInstallment(this.loan, this.installmentNumber,
                 this.fromDate, this.dueDate, this.principal.getAmount(), 
this.interest.getAmount(), this.feeCharges.getAmount(),
                 this.penaltyCharges.getAmount(), 
this.recalculatedInterestComponent, compoundingDetails);

Reply via email to