You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@fineract.apache.org by ad...@apache.org on 2024/06/13 18:29:28 UTC

(fineract) branch develop updated: FINERACT-2091: Support for string type primary keys

This is an automated email from the ASF dual-hosted git repository.

adamsaghy pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/fineract.git


The following commit(s) were added to refs/heads/develop by this push:
     new f48f94c45 FINERACT-2091: Support for string type primary keys
f48f94c45 is described below

commit f48f94c454f71b2fd12c0ac50ebb93bc3db81c0e
Author: Marta Jankovics <ma...@gmail.com>
AuthorDate: Sat Jun 8 22:35:35 2024 +0200

    FINERACT-2091: Support for string type primary keys
---
 .../domain/FinancialActivityAccount.java           |  2 +-
 .../accounting/glaccount/domain/TrialBalance.java  |  2 +-
 .../journalentry/domain/JournalEntry.java          |  2 +-
 .../domain/ProductToGLAccountMapping.java          |  3 +-
 .../accounting/rule/domain/AccountingRule.java     |  2 +-
 .../accounting/rule/domain/AccountingTagRule.java  |  2 +-
 .../organisation/teller/domain/Cashier.java        |  2 +-
 .../teller/domain/CashierTransaction.java          |  2 +-
 .../organisation/teller/domain/Teller.java         |  2 +-
 .../teller/domain/TellerTransaction.java           |  2 +-
 .../fineract/portfolio/charge/domain/Charge.java   |  2 +-
 .../accounting/glaccount/domain/GLAccount.java     |  2 +-
 .../org/apache/fineract/cob/COBBusinessStep.java   |  2 +-
 .../fineract/commands/domain/CommandSource.java    |  2 +-
 .../businessdate/domain/BusinessDate.java          |  2 +-
 .../infrastructure/cache/domain/PlatformCache.java |  2 +-
 .../fineract/infrastructure/codes/domain/Code.java |  2 +-
 .../infrastructure/codes/domain/CodeValue.java     |  2 +-
 .../core/domain/AbstractAuditableCustom.java       |  2 +-
 .../AbstractAuditableWithUTCDateTimeCustom.java    |  5 ++-
 .../core/domain/AbstractPersistableCustom.java     |  4 +-
 .../documentmanagement/domain/Image.java           |  2 +-
 .../external/repository/domain/ExternalEvent.java  |  2 +-
 .../organisation/holiday/domain/Holiday.java       |  2 +-
 .../monetary/domain/ApplicationCurrency.java       |  2 +-
 .../monetary/domain/OrganisationCurrency.java      |  2 +-
 .../organisation/office/domain/Office.java         |  2 +-
 .../fineract/organisation/staff/domain/Staff.java  |  2 +-
 .../workingdays/domain/WorkingDays.java            |  2 +-
 .../portfolio/calendar/domain/Calendar.java        |  2 +-
 .../portfolio/calendar/domain/CalendarHistory.java |  2 +-
 .../calendar/domain/CalendarInstance.java          |  2 +-
 .../fineract/portfolio/client/domain/Client.java   | 13 +------
 .../portfolio/client/domain/ClientIdentifier.java  |  2 +-
 .../delinquency/domain/DelinquencyBucket.java      |  2 +-
 .../delinquency/domain/DelinquencyRange.java       |  2 +-
 .../fineract/portfolio/fund/domain/Fund.java       |  2 +-
 .../fineract/portfolio/group/domain/Group.java     |  2 +-
 .../portfolio/group/domain/GroupLevel.java         |  2 +-
 .../fineract/portfolio/group/domain/GroupRole.java |  2 +-
 .../paymentdetail/domain/PaymentDetail.java        | 15 +++-----
 .../portfolio/paymenttype/domain/PaymentType.java  |  2 +-
 .../useradministration/domain/AppUser.java         |  2 +-
 .../domain/AppUserClientMapping.java               |  2 +-
 .../useradministration/domain/Permission.java      |  2 +-
 .../fineract/useradministration/domain/Role.java   |  2 +-
 .../documentmanagement/domain/Document.java        |  2 +-
 .../investor/domain/ExternalAssetOwner.java        |  2 +-
 .../ExternalAssetOwnerJournalEntryMapping.java     |  2 +-
 .../domain/ExternalAssetOwnerTransfer.java         |  2 +-
 .../domain/ExternalAssetOwnerTransferDetails.java  |  2 +-
 ...ernalAssetOwnerTransferJournalEntryMapping.java |  2 +-
 .../ExternalAssetOwnerTransferLoanMapping.java     |  2 +-
 .../collateral/domain/LoanCollateral.java          |  2 +-
 .../domain/ClientCollateralManagement.java         |  2 +-
 .../domain/CollateralManagementDomain.java         |  2 +-
 .../domain/DelinquencyBucketMappings.java          |  2 +-
 .../delinquency/domain/LoanDelinquencyAction.java  |  2 +-
 .../domain/LoanDelinquencyTagHistory.java          |  2 +-
 .../domain/LoanInstallmentDelinquencyTag.java      |  2 +-
 .../GroupLoanIndividualMonitoringAccount.java      |  2 +-
 .../portfolio/loanaccount/domain/Loan.java         |  2 +-
 .../portfolio/loanaccount/domain/LoanCharge.java   |  2 +-
 .../loanaccount/domain/LoanChargePaidBy.java       |  2 +-
 .../domain/LoanCollateralManagement.java           |  2 +-
 .../domain/LoanCreditAllocationRule.java           |  2 +-
 .../domain/LoanDisbursementDetails.java            |  2 +-
 .../loanaccount/domain/LoanInstallmentCharge.java  |  2 +-
 ...LoanInterestRecalcualtionAdditionalDetails.java |  2 +-
 .../domain/LoanInterestRecalculationDetails.java   |  2 +-
 .../domain/LoanOverdueInstallmentCharge.java       |  2 +-
 .../domain/LoanPaymentAllocationRule.java          |  2 +-
 .../domain/LoanRepaymentScheduleInstallment.java   |  2 +-
 ...oanRescheduleRequestToTermVariationMapping.java |  2 +-
 .../domain/LoanStatusChangeHistory.java            |  2 +-
 .../loanaccount/domain/LoanTermVariations.java     |  2 +-
 .../loanaccount/domain/LoanTopupDetails.java       |  2 +-
 .../loanaccount/domain/LoanTrancheCharge.java      |  2 +-
 .../domain/LoanTrancheDisbursementCharge.java      |  2 +-
 .../loanaccount/domain/LoanTransaction.java        |  2 +-
 .../domain/LoanTransactionRelation.java            |  2 +-
 .../LoanTransactionToRepaymentScheduleMapping.java |  2 +-
 .../domain/reaging/LoanReAgeParameter.java         |  2 +-
 .../domain/LoanRepaymentScheduleHistory.java       |  2 +-
 .../domain/LoanRescheduleRequest.java              |  2 +-
 .../portfolio/loanproduct/domain/LoanProduct.java  |  2 +-
 .../domain/LoanProductBorrowerCycleVariations.java |  2 +-
 .../domain/LoanProductConfigurableAttributes.java  |  2 +-
 .../domain/LoanProductCreditAllocationRule.java    |  2 +-
 .../domain/LoanProductFloatingRates.java           |  2 +-
 .../domain/LoanProductGuaranteeDetails.java        |  2 +-
 .../LoanProductInterestRecalculationDetails.java   |  2 +-
 .../domain/LoanProductPaymentAllocationRule.java   |  2 +-
 .../LoanProductVariableInstallmentConfig.java      |  2 +-
 .../domain/PostDatedChecks.java                    |  2 +-
 ...cedPaymentScheduleTransactionProcessorTest.java |  1 +
 .../domain/LoanProductProvisioningEntry.java       |  2 +-
 .../provisioning/domain/ProvisioningEntry.java     |  2 +-
 .../fineract/cob/COBBusinessStepService.java       |  4 +-
 .../fineract/cob/COBBusinessStepServiceImpl.java   |  4 +-
 .../fineract/cob/domain/BatchBusinessStep.java     |  2 +-
 .../fineract/cob/service/LoanReloadService.java    |  2 +-
 .../apache/fineract/cob/service/ReloadService.java |  4 +-
 .../fineract/cob/service/ReloaderService.java      |  2 +-
 .../domain/AccountNumberFormat.java                |  2 +-
 .../bulkimport/domain/ImportDocument.java          |  2 +-
 .../campaigns/email/domain/EmailCampaign.java      |  2 +-
 .../campaigns/email/domain/EmailConfiguration.java |  2 +-
 .../campaigns/email/domain/EmailMessage.java       |  2 +-
 .../campaigns/sms/domain/SmsCampaign.java          |  2 +-
 .../configuration/domain/ExternalService.java      |  2 +-
 .../domain/GlobalConfigurationProperty.java        |  2 +-
 .../creditbureau/domain/CreditBureau.java          |  2 +-
 .../domain/CreditBureauConfiguration.java          |  2 +-
 .../domain/CreditBureauLoanProductMapping.java     |  2 +-
 .../creditbureau/domain/CreditBureauToken.java     |  2 +-
 .../creditbureau/domain/CreditReport.java          |  2 +-
 .../domain/OrganisationCreditBureau.java           |  2 +-
 .../dataqueries/domain/EntityDatatableChecks.java  |  2 +-
 .../dataqueries/domain/RegisteredDatatable.java    |  3 +-
 .../infrastructure/dataqueries/domain/Report.java  |  2 +-
 .../dataqueries/domain/ReportParameter.java        |  2 +-
 .../dataqueries/domain/ReportParameterUsage.java   |  2 +-
 .../entityaccess/domain/FineractEntityAccess.java  |  2 +-
 .../domain/FineractEntityRelation.java             |  2 +-
 .../domain/FineractEntityToEntityMapping.java      |  2 +-
 .../gcm/domain/DeviceRegistration.java             |  2 +-
 .../hooks/domain/HookConfiguration.java            |  2 +-
 .../infrastructure/hooks/domain/HookResource.java  |  2 +-
 .../infrastructure/hooks/domain/HookTemplate.java  |  2 +-
 .../infrastructure/hooks/domain/Schema.java        |  2 +-
 .../jobs/domain/CustomJobParameter.java            |  2 +-
 .../infrastructure/jobs/domain/JobParameter.java   |  2 +-
 .../jobs/domain/ScheduledJobDetail.java            |  2 +-
 .../jobs/domain/ScheduledJobRunHistory.java        |  2 +-
 .../jobs/domain/SchedulerDetail.java               |  2 +-
 .../domain/ReportMailingJobConfiguration.java      |  2 +-
 .../domain/ReportMailingJobRunHistory.java         |  2 +-
 .../security/domain/TFAccessToken.java             |  2 +-
 .../security/domain/TwoFactorConfiguration.java    |  2 +-
 .../infrastructure/sms/domain/SmsMessage.java      |  2 +-
 .../infrastructure/survey/domain/Likelihood.java   |  2 +-
 .../fineract/mix/domain/MixTaxonomyMapping.java    |  2 +-
 .../fineract/notification/domain/Notification.java |  2 +-
 .../notification/domain/NotificationMapper.java    |  2 +-
 .../office/domain/OfficeTransaction.java           |  2 +-
 .../domain/LoanProductProvisionCriteria.java       |  2 +-
 .../provisioning/domain/ProvisioningCategory.java  |  2 +-
 .../domain/ProvisioningCriteriaDefinition.java     |  2 +-
 .../account/domain/AccountAssociations.java        |  2 +-
 .../account/domain/AccountTransferDetails.java     |  2 +-
 .../domain/AccountTransferStandingInstruction.java |  2 +-
 .../account/domain/AccountTransferTransaction.java |  2 +-
 .../fineract/portfolio/address/domain/Address.java |  2 +-
 .../address/domain/FieldConfiguration.java         |  2 +-
 .../portfolio/client/domain/ClientAddress.java     |  2 +-
 .../portfolio/client/domain/ClientCharge.java      |  2 +-
 .../client/domain/ClientChargePaidBy.java          |  2 +-
 .../client/domain/ClientFamilyMembers.java         |  2 +-
 .../portfolio/client/domain/ClientNonPerson.java   |  2 +-
 .../portfolio/client/domain/ClientTransaction.java |  2 +-
 .../client/domain/ClientTransferDetails.java       |  2 +-
 .../loanaccount/guarantor/domain/Guarantor.java    |  2 +-
 .../guarantor/domain/GuarantorFundingDetails.java  |  2 +-
 .../domain/GuarantorFundingTransaction.java        |  2 +-
 .../loanproduct/productmix/domain/ProductMix.java  |  2 +-
 .../attendance/domain/ClientAttendance.java        |  2 +-
 .../fineract/portfolio/meeting/domain/Meeting.java |  2 +-
 .../fineract/portfolio/note/domain/Note.java       |  2 +-
 .../domain/DepositAccountRecurringDetail.java      |  2 +-
 .../RecurringDepositScheduleInstallment.java       |  2 +-
 .../self/account/domain/SelfBeneficiariesTPT.java  |  2 +-
 .../portfolio/self/pockets/domain/Pocket.java      |  2 +-
 .../self/pockets/domain/PocketAccountMapping.java  |  2 +-
 .../domain/SelfServiceRegistration.java            |  2 +-
 .../shareaccounts/domain/ShareAccount.java         |  2 +-
 .../shareaccounts/domain/ShareAccountCharge.java   |  2 +-
 .../domain/ShareAccountChargePaidBy.java           |  2 +-
 .../domain/ShareAccountDividendDetails.java        |  2 +-
 .../domain/ShareAccountTransaction.java            |  2 +-
 .../domain/ShareProductMarketPrice.java            |  2 +-
 .../org/apache/fineract/spm/domain/Component.java  |  2 +-
 .../apache/fineract/spm/domain/LookupTable.java    |  2 +-
 .../org/apache/fineract/spm/domain/Question.java   |  2 +-
 .../org/apache/fineract/spm/domain/Response.java   |  2 +-
 .../org/apache/fineract/spm/domain/Scorecard.java  |  2 +-
 .../org/apache/fineract/spm/domain/Survey.java     |  2 +-
 .../apache/fineract/template/domain/Template.java  |  2 +-
 .../fineract/template/domain/TemplateMapper.java   |  2 +-
 .../domain/AppUserPreviousPassword.java            |  2 +-
 .../domain/PasswordValidationPolicy.java           |  2 +-
 .../SynchronousCommandProcessingServiceTest.java   |  2 +
 .../core/auditing/CustomAuditingHandlerTest.java   |  4 +-
 ...cyWritePlatformServiceRangeChangeEventTest.java |  5 ++-
 .../floatingrates/domain/FloatingRate.java         |  2 +-
 .../floatingrates/domain/FloatingRatePeriod.java   |  2 +-
 .../interoperation/domain/InteropIdentifier.java   |  2 +-
 .../domain/InterestIncentives.java                 |  2 +-
 .../domain/InterestRateChart.java                  |  2 +-
 .../domain/InterestRateChartSlab.java              |  2 +-
 .../domain/DepositAccountInterestIncentive.java    |  2 +-
 .../domain/DepositAccountInterestIncentives.java   |  2 +-
 .../domain/DepositAccountInterestRateChart.java    |  2 +-
 .../DepositAccountInterestRateChartSlabs.java      |  2 +-
 .../domain/DepositAccountOnHoldTransaction.java    |  2 +-
 .../domain/DepositAccountTermAndPreClosure.java    |  2 +-
 .../domain/DepositProductRecurringDetail.java      |  2 +-
 .../domain/DepositProductTermAndPreClosure.java    |  2 +-
 .../domain/GroupSavingsIndividualMonitoring.java   |  2 +-
 .../portfolio/savings/domain/SavingsAccount.java   | 45 +++++++---------------
 .../savings/domain/SavingsAccountCharge.java       |  2 +-
 .../savings/domain/SavingsAccountChargePaidBy.java |  2 +-
 .../savings/domain/SavingsAccountTransaction.java  |  2 +-
 .../SavingsAccountTransactionTaxDetails.java       |  2 +-
 .../domain/SavingsOfficerAssignmentHistory.java    |  2 +-
 .../portfolio/savings/domain/SavingsProduct.java   |  2 +-
 216 files changed, 243 insertions(+), 273 deletions(-)

diff --git a/fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java b/fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
index fb92bab1d..b08d9fd6b 100644
--- a/fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
+++ b/fineract-accounting/src/main/java/org/apache/fineract/accounting/financialactivityaccount/domain/FinancialActivityAccount.java
@@ -36,7 +36,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
 @AllArgsConstructor
 @Getter
-public class FinancialActivityAccount extends AbstractPersistableCustom {
+public class FinancialActivityAccount extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.EAGER)
     @JoinColumn(name = "gl_account_id")
diff --git a/fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java b/fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java
index 757d37774..41836a3ac 100644
--- a/fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java
+++ b/fineract-accounting/src/main/java/org/apache/fineract/accounting/glaccount/domain/TrialBalance.java
@@ -38,7 +38,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class TrialBalance extends AbstractPersistableCustom {
+public class TrialBalance extends AbstractPersistableCustom<Long> {
 
     @Column(name = "office_id", nullable = false)
     private Long officeId;
diff --git a/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java b/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
index 35d56be85..1c2c18715 100644
--- a/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
+++ b/fineract-accounting/src/main/java/org/apache/fineract/accounting/journalentry/domain/JournalEntry.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
 @Entity
 @Getter
 @Table(name = "acc_gl_journal_entry")
-public class JournalEntry extends AbstractAuditableWithUTCDateTimeCustom {
+public class JournalEntry extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "office_id", nullable = false)
diff --git a/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java b/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
index cee097e2e..8dd35f891 100644
--- a/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
+++ b/fineract-accounting/src/main/java/org/apache/fineract/accounting/producttoaccountmapping/domain/ProductToGLAccountMapping.java
@@ -40,7 +40,7 @@ import org.apache.fineract.portfolio.paymenttype.domain.PaymentType;
 @Entity
 @Table(name = "acc_product_mapping", uniqueConstraints = { @UniqueConstraint(columnNames = { "product_id", "product_type",
         "financial_account_type", "payment_type" }, name = "financial_action") })
-public class ProductToGLAccountMapping extends AbstractPersistableCustom {
+public class ProductToGLAccountMapping extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = true)
     @JoinColumn(name = "gl_account_id")
@@ -69,5 +69,4 @@ public class ProductToGLAccountMapping extends AbstractPersistableCustom {
         return new ProductToGLAccountMapping().setGlAccount(glAccount).setProductId(productId).setProductType(productType)
                 .setFinancialAccountType(financialAccountType);
     }
-
 }
diff --git a/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java b/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
index d820260bc..88127c622 100644
--- a/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
+++ b/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingRule.java
@@ -52,7 +52,7 @@ import org.apache.fineract.organisation.office.domain.Office;
 @Entity
 @Table(name = "acc_accounting_rule", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "name" }, name = "accounting_rule_name_unique") })
-public class AccountingRule extends AbstractPersistableCustom {
+public class AccountingRule extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false, length = 500)
     private String name;
diff --git a/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java b/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
index df08570c6..7952c337c 100644
--- a/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
+++ b/fineract-accounting/src/main/java/org/apache/fineract/accounting/rule/domain/AccountingTagRule.java
@@ -38,7 +38,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Entity
 @Table(name = "acc_rule_tags", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "acc_rule_id", "tag_id", "acc_type_enum" }, name = "UNIQUE_ACCOUNT_RULE_TAGS") })
-public class AccountingTagRule extends AbstractPersistableCustom {
+public class AccountingTagRule extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "acc_rule_id", nullable = false)
diff --git a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java
index bc0ce7a3a..32759ab79 100644
--- a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java
+++ b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Cashier.java
@@ -56,7 +56,7 @@ import org.apache.fineract.organisation.staff.domain.Staff;
 @NoArgsConstructor
 @AllArgsConstructor
 @Accessors(chain = true)
-public class Cashier extends AbstractPersistableCustom {
+public class Cashier extends AbstractPersistableCustom<Long> {
 
     // ManyToOne(fetch = FetchType.LAZY)
     // JoinColumn(name = "office_id", nullable = false)
diff --git a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java
index 9034d5d5c..098a1c683 100644
--- a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java
+++ b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/CashierTransaction.java
@@ -47,7 +47,7 @@ import org.apache.fineract.organisation.office.domain.Office;
 @NoArgsConstructor
 @AllArgsConstructor
 @Accessors(chain = true)
-public class CashierTransaction extends AbstractPersistableCustom {
+public class CashierTransaction extends AbstractPersistableCustom<Long> {
 
     @Transient
     private Office office;
diff --git a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java
index f5241370b..91e22d10e 100644
--- a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java
+++ b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/Teller.java
@@ -47,7 +47,7 @@ import org.apache.fineract.organisation.office.domain.Office;
 @NoArgsConstructor
 @AllArgsConstructor
 @Accessors(chain = true)
-public class Teller extends AbstractPersistableCustom {
+public class Teller extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "office_id", nullable = false)
diff --git a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java
index 2c840c515..fbccb706a 100644
--- a/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java
+++ b/fineract-branch/src/main/java/org/apache/fineract/organisation/teller/domain/TellerTransaction.java
@@ -41,7 +41,7 @@ import org.apache.fineract.portfolio.client.domain.Client;
 @NoArgsConstructor
 @AllArgsConstructor
 @Accessors(chain = true)
-public class TellerTransaction extends AbstractPersistableCustom {
+public class TellerTransaction extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "office_id", nullable = false)
diff --git a/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
index 24b2e1978..86e330243 100644
--- a/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
+++ b/fineract-charge/src/main/java/org/apache/fineract/portfolio/charge/domain/Charge.java
@@ -57,7 +57,7 @@ import org.apache.fineract.portfolio.tax.domain.TaxGroup;
 
 @Entity
 @Table(name = "m_charge", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "name") })
-public class Charge extends AbstractPersistableCustom {
+public class Charge extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", length = 100)
     private String name;
diff --git a/fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java b/fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
index 0884ac168..0107fe296 100644
--- a/fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
+++ b/fineract-core/src/main/java/org/apache/fineract/accounting/glaccount/domain/GLAccount.java
@@ -45,7 +45,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class GLAccount extends AbstractPersistableCustom {
+public class GLAccount extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "parent_id")
diff --git a/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java b/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
index 44d8629b7..2d0cea7d4 100644
--- a/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
+++ b/fineract-core/src/main/java/org/apache/fineract/cob/COBBusinessStep.java
@@ -20,7 +20,7 @@ package org.apache.fineract.cob;
 
 import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
-public interface COBBusinessStep<T extends AbstractPersistableCustom> {
+public interface COBBusinessStep<T extends AbstractPersistableCustom<Long>> {
 
     T execute(T input);
 
diff --git a/fineract-core/src/main/java/org/apache/fineract/commands/domain/CommandSource.java b/fineract-core/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
index a035daeda..2fadde646 100644
--- a/fineract-core/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
+++ b/fineract-core/src/main/java/org/apache/fineract/commands/domain/CommandSource.java
@@ -33,7 +33,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "m_portfolio_command_source")
-public class CommandSource extends AbstractPersistableCustom {
+public class CommandSource extends AbstractPersistableCustom<Long> {
 
     @Column(name = "action_name", nullable = true, length = 100)
     private String actionName;
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDate.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDate.java
index 7fd6a9e27..e7bec9312 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDate.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/businessdate/domain/BusinessDate.java
@@ -39,7 +39,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Accessors(chain = true)
 @Entity
 @Table(name = "m_business_date", uniqueConstraints = { @UniqueConstraint(name = "uq_business_date_type", columnNames = { "type" }) })
-public class BusinessDate extends AbstractAuditableWithUTCDateTimeCustom {
+public class BusinessDate extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Enumerated(EnumType.STRING)
     @Column(name = "type")
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
index af57933ab..1b434c80d 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/cache/domain/PlatformCache.java
@@ -33,7 +33,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class PlatformCache extends AbstractPersistableCustom {
+public class PlatformCache extends AbstractPersistableCustom<Long> {
 
     @Column(name = "cache_type_enum")
     private Integer cacheType;
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
index 877b28661..f84f39600 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/Code.java
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class Code extends AbstractPersistableCustom {
+public class Code extends AbstractPersistableCustom<Long> {
 
     @Column(name = "code_name", length = 100)
     private String name;
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
index 1d29991ce..025268e5c 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/codes/domain/CodeValue.java
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class CodeValue extends AbstractPersistableCustom {
+public class CodeValue extends AbstractPersistableCustom<Long> {
 
     @Column(name = "code_value", length = 100)
     private String label;
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
index e733975eb..9f9bfa23d 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
@@ -39,7 +39,7 @@ import org.springframework.data.jpa.domain.AbstractAuditable;
  *            the type of the auditing type's identifier
  */
 @MappedSuperclass
-public abstract class AbstractAuditableCustom extends AbstractPersistableCustom implements Auditable<Long, Long, LocalDateTime> {
+public abstract class AbstractAuditableCustom extends AbstractPersistableCustom<Long> implements Auditable<Long, Long, LocalDateTime> {
 
     private static final long serialVersionUID = 141481953116476081L;
 
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableWithUTCDateTimeCustom.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableWithUTCDateTimeCustom.java
index 55beda888..802608512 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableWithUTCDateTimeCustom.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableWithUTCDateTimeCustom.java
@@ -26,6 +26,7 @@ import static org.apache.fineract.infrastructure.core.domain.AuditableFieldsCons
 import jakarta.persistence.Column;
 import jakarta.persistence.MappedSuperclass;
 import jakarta.validation.constraints.NotNull;
+import java.io.Serializable;
 import java.time.OffsetDateTime;
 import java.util.Optional;
 import lombok.AccessLevel;
@@ -47,8 +48,8 @@ import org.springframework.data.jpa.domain.AbstractAuditable;
 @Getter
 @Setter
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
-public abstract class AbstractAuditableWithUTCDateTimeCustom extends AbstractPersistableCustom
-        implements Auditable<Long, Long, OffsetDateTime> {
+public abstract class AbstractAuditableWithUTCDateTimeCustom<T extends Serializable> extends AbstractPersistableCustom<T>
+        implements Auditable<Long, T, OffsetDateTime> {
 
     private static final long serialVersionUID = 141481953116476081L;
 
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java
index c961c078b..7c0813fdc 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractPersistableCustom.java
@@ -48,14 +48,14 @@ import org.springframework.data.domain.Persistable;
 @Getter
 @Setter
 @NoArgsConstructor
-public abstract class AbstractPersistableCustom implements Persistable<Long>, Serializable {
+public abstract class AbstractPersistableCustom<T extends Serializable> implements Persistable<T>, Serializable {
 
     private static final long serialVersionUID = 9181640245194392646L;
 
     @Id
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     @Getter(onMethod = @__(@Override))
-    private Long id;
+    private T id;
 
     @Transient
     @Setter(value = AccessLevel.NONE)
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Image.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Image.java
index 1dd0bf2bb..190137a84 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Image.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Image.java
@@ -25,7 +25,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_image")
-public final class Image extends AbstractPersistableCustom {
+public final class Image extends AbstractPersistableCustom<Long> {
 
     @Column(name = "location", length = 500)
     private String location;
diff --git a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/repository/domain/ExternalEvent.java b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/repository/domain/ExternalEvent.java
index b3ff59f18..db0a63b3c 100644
--- a/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/repository/domain/ExternalEvent.java
+++ b/fineract-core/src/main/java/org/apache/fineract/infrastructure/event/external/repository/domain/ExternalEvent.java
@@ -37,7 +37,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
 @Table(name = "m_external_event")
 @Getter
 @NoArgsConstructor
-public class ExternalEvent extends AbstractPersistableCustom {
+public class ExternalEvent extends AbstractPersistableCustom<Long> {
 
     @Column(name = "type", nullable = false)
     private String type;
diff --git a/fineract-core/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java b/fineract-core/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java
index 6eb16fe82..a5e2372fe 100644
--- a/fineract-core/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java
+++ b/fineract-core/src/main/java/org/apache/fineract/organisation/holiday/domain/Holiday.java
@@ -62,7 +62,7 @@ import org.apache.fineract.organisation.office.domain.Office;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class Holiday extends AbstractPersistableCustom {
+public class Holiday extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", unique = true, nullable = false, length = 100)
     private String name;
diff --git a/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java b/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java
index e8e0916a3..4eb1f59af 100644
--- a/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java
+++ b/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/ApplicationCurrency.java
@@ -26,7 +26,7 @@ import org.apache.fineract.organisation.monetary.data.CurrencyData;
 
 @Entity
 @Table(name = "m_currency")
-public class ApplicationCurrency extends AbstractPersistableCustom {
+public class ApplicationCurrency extends AbstractPersistableCustom<Long> {
 
     @Column(name = "code", nullable = false, length = 3)
     private String code;
diff --git a/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/OrganisationCurrency.java b/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/OrganisationCurrency.java
index e62e9c5b6..11bf2e387 100644
--- a/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/OrganisationCurrency.java
+++ b/fineract-core/src/main/java/org/apache/fineract/organisation/monetary/domain/OrganisationCurrency.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
  */
 @Entity
 @Table(name = "m_organisation_currency")
-public class OrganisationCurrency extends AbstractPersistableCustom {
+public class OrganisationCurrency extends AbstractPersistableCustom<Long> {
 
     @Column(name = "code", nullable = false, length = 3)
     private String code;
diff --git a/fineract-core/src/main/java/org/apache/fineract/organisation/office/domain/Office.java b/fineract-core/src/main/java/org/apache/fineract/organisation/office/domain/Office.java
index f6bd289c5..591f78fd0 100644
--- a/fineract-core/src/main/java/org/apache/fineract/organisation/office/domain/Office.java
+++ b/fineract-core/src/main/java/org/apache/fineract/organisation/office/domain/Office.java
@@ -49,7 +49,7 @@ import org.apache.fineract.organisation.office.exception.RootOfficeParentCannotB
         @UniqueConstraint(columnNames = { "external_id" }, name = "externalid_org") })
 @Getter
 @Setter
-public class Office extends AbstractPersistableCustom implements Serializable {
+public class Office extends AbstractPersistableCustom<Long> implements Serializable {
 
     @OneToMany(fetch = FetchType.LAZY)
     @JoinColumn(name = "parent_id")
diff --git a/fineract-core/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java b/fineract-core/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java
index 88e9d2a0f..7830c40f6 100644
--- a/fineract-core/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java
+++ b/fineract-core/src/main/java/org/apache/fineract/organisation/staff/domain/Staff.java
@@ -41,7 +41,7 @@ import org.apache.fineract.organisation.office.domain.Office;
 @Table(name = "m_staff", uniqueConstraints = { @UniqueConstraint(columnNames = { "display_name" }, name = "display_name"),
         @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE"),
         @UniqueConstraint(columnNames = { "mobile_no" }, name = "mobile_no_UNIQUE") })
-public class Staff extends AbstractPersistableCustom {
+public class Staff extends AbstractPersistableCustom<Long> {
 
     @Column(name = "firstname", length = 50)
     private String firstname;
diff --git a/fineract-core/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java b/fineract-core/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java
index a8a3e78a6..8fbe7125b 100644
--- a/fineract-core/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java
+++ b/fineract-core/src/main/java/org/apache/fineract/organisation/workingdays/domain/WorkingDays.java
@@ -32,7 +32,7 @@ import org.apache.fineract.organisation.workingdays.api.WorkingDaysApiConstants;
 @Getter
 @Entity
 @Table(name = "m_working_days")
-public class WorkingDays extends AbstractPersistableCustom {
+public class WorkingDays extends AbstractPersistableCustom<Long> {
 
     @Column(name = "recurrence", length = 100, nullable = true)
     private String recurrence;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java
index 227bc1917..54ed8ae66 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/Calendar.java
@@ -50,7 +50,7 @@ import org.apache.fineract.portfolio.common.domain.NthDayType;
 
 @Entity
 @Table(name = "m_calendar")
-public class Calendar extends AbstractAuditableWithUTCDateTimeCustom {
+public class Calendar extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "title", length = 50, nullable = false)
     private String title;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java
index cd2f1fbfe..b841d492a 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarHistory.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
 
 @Entity
 @Table(name = "m_calendar_history")
-public class CalendarHistory extends AbstractPersistableCustom {
+public class CalendarHistory extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "calendar_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java
index 0e5cae359..88b2399ed 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/calendar/domain/CalendarInstance.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_calendar_instance")
-public class CalendarInstance extends AbstractPersistableCustom {
+public class CalendarInstance extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(cascade = CascadeType.PERSIST)
     @JoinColumn(name = "calendar_id", nullable = false)
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
index a65f2d44b..a70cb8cf6 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/Client.java
@@ -60,7 +60,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 @Setter
 @Table(name = "m_client", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_no" }, name = "account_no_UNIQUE"), //
         @UniqueConstraint(columnNames = { "mobile_no" }, name = "mobile_no_UNIQUE") })
-public class Client extends AbstractAuditableWithUTCDateTimeCustom {
+public class Client extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "account_no", length = 20, unique = true, nullable = false)
     private String accountNumber;
@@ -181,16 +181,6 @@ public class Client extends AbstractAuditableWithUTCDateTimeCustom {
     @Column(name = "submittedon_date")
     private LocalDate submittedOnDate;
 
-    /*
-     * Deprecated since common Auditable fields were introduced. Columns and data left untouched to help migration.
-     *
-     * @Column(name = "updated_on") private LocalDate updatedOnDate;
-     *
-     * @ManyToOne(optional = true, fetch = FetchType.LAZY)
-     *
-     * @JoinColumn(name = "updated_by") private AppUser updatedBy;
-     */
-
     @ManyToOne(optional = true, fetch = FetchType.LAZY)
     @JoinColumn(name = "activatedon_userid")
     private AppUser activatedBy;
@@ -751,5 +741,4 @@ public class Client extends AbstractAuditableWithUTCDateTimeCustom {
             setDisplayName(null);
         }
     }
-
 }
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientIdentifier.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientIdentifier.java
index d2365eb3f..3c4beaadc 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientIdentifier.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/client/domain/ClientIdentifier.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Table(name = "m_client_identifier", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "document_type_id", "document_key" }, name = "unique_identifier_key"),
         @UniqueConstraint(columnNames = { "client_id", "document_key", "active" }, name = "unique_active_client_identifier") })
-public class ClientIdentifier extends AbstractAuditableWithUTCDateTimeCustom {
+public class ClientIdentifier extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_id", nullable = false)
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucket.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucket.java
index bf1995e0b..6bda19523 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucket.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucket.java
@@ -39,7 +39,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Entity
 @Table(name = "m_delinquency_bucket", uniqueConstraints = {
         @UniqueConstraint(name = "uq_delinquency_bucket_name", columnNames = { "name" }) })
-public class DelinquencyBucket extends AbstractAuditableWithUTCDateTimeCustom {
+public class DelinquencyBucket extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "name", nullable = false)
     private String name;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyRange.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyRange.java
index 8ad31172c..00d573ffe 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyRange.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyRange.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Entity
 @Table(name = "m_delinquency_range", uniqueConstraints = {
         @UniqueConstraint(name = "uq_delinquency_range_classification", columnNames = { "classification" }) })
-public class DelinquencyRange extends AbstractAuditableWithUTCDateTimeCustom {
+public class DelinquencyRange extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "classification", nullable = false)
     private String classification;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/fund/domain/Fund.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/fund/domain/Fund.java
index cc44a3c01..eb791ef3a 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/fund/domain/Fund.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/fund/domain/Fund.java
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Entity
 @Table(name = "m_fund", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "fund_name_org"),
         @UniqueConstraint(columnNames = { "external_id" }, name = "fund_externalid_org") })
-public class Fund extends AbstractPersistableCustom {
+public class Fund extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name")
     private String name;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java
index 84d73c8e1..e67b706ae 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/Group.java
@@ -58,7 +58,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "m_group")
-public final class Group extends AbstractPersistableCustom {
+public final class Group extends AbstractPersistableCustom<Long> {
 
     @Column(name = "external_id", length = 100, unique = true)
     private String externalId;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupLevel.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupLevel.java
index 1b2a1eccb..2f014d341 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupLevel.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupLevel.java
@@ -25,7 +25,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_group_level")
-public class GroupLevel extends AbstractPersistableCustom {
+public class GroupLevel extends AbstractPersistableCustom<Long> {
 
     @Column(name = "parent_id")
     private Long parentId;
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRole.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRole.java
index 6614c5894..d6b2ab10e 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRole.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/group/domain/GroupRole.java
@@ -33,7 +33,7 @@ import org.apache.fineract.portfolio.group.api.GroupingTypesApiConstants;
 
 @Entity
 @Table(name = "m_group_roles")
-public class GroupRole extends AbstractPersistableCustom {
+public class GroupRole extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "group_id")
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java
index 46de7071e..d7c34206e 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/paymentdetail/domain/PaymentDetail.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.paymenttype.domain.PaymentType;
 @Entity
 @Getter
 @Table(name = "m_payment_detail")
-public final class PaymentDetail extends AbstractPersistableCustom {
+public class PaymentDetail extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "payment_type_id", nullable = false)
@@ -57,9 +57,7 @@ public final class PaymentDetail extends AbstractPersistableCustom {
     @Column(name = "bank_number", length = 50)
     private String bankNumber;
 
-    PaymentDetail() {
-
-    }
+    protected PaymentDetail() {}
 
     public static PaymentDetail generatePaymentDetail(final PaymentType paymentType, final JsonCommand command,
             final Map<String, Object> changes) {
@@ -85,9 +83,7 @@ public final class PaymentDetail extends AbstractPersistableCustom {
             changes.put(PaymentDetailConstants.bankNumberParamName, bankNumber);
         }
         changes.put("paymentTypeId", paymentType.getId());
-        final PaymentDetail paymentDetail = new PaymentDetail(paymentType, accountNumber, checkNumber, routingCode, receiptNumber,
-                bankNumber);
-        return paymentDetail;
+        return new PaymentDetail(paymentType, accountNumber, checkNumber, routingCode, receiptNumber, bankNumber);
     }
 
     public static PaymentDetail instance(final PaymentType paymentType, final String accountNumber, final String checkNumber,
@@ -107,8 +103,7 @@ public final class PaymentDetail extends AbstractPersistableCustom {
 
     public PaymentDetailData toData() {
         final PaymentTypeData paymentTypeData = null; // this.paymentType.toData();
-        final PaymentDetailData paymentDetailData = new PaymentDetailData(getId(), paymentTypeData, this.accountNumber, this.checkNumber,
-                this.routingCode, this.receiptNumber, this.bankNumber);
-        return paymentDetailData;
+        return new PaymentDetailData(getId(), paymentTypeData, this.accountNumber, this.checkNumber, this.routingCode, this.receiptNumber,
+                this.bankNumber);
     }
 }
diff --git a/fineract-core/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java b/fineract-core/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java
index f1b5cc671..321276f38 100644
--- a/fineract-core/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java
+++ b/fineract-core/src/main/java/org/apache/fineract/portfolio/paymenttype/domain/PaymentType.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.paymenttype.api.PaymentTypeApiResourceConst
 @Entity
 @Table(name = "m_payment_type")
 @AllArgsConstructor
-public class PaymentType extends AbstractPersistableCustom {
+public class PaymentType extends AbstractPersistableCustom<Long> {
 
     @Column(name = "value")
     private String name;
diff --git a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
index cce8954de..64f83883f 100644
--- a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
+++ b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUser.java
@@ -57,7 +57,7 @@ import org.springframework.security.core.userdetails.User;
 
 @Entity
 @Table(name = "m_appuser", uniqueConstraints = @UniqueConstraint(columnNames = { "username" }, name = "username_org"))
-public class AppUser extends AbstractPersistableCustom implements PlatformUser {
+public class AppUser extends AbstractPersistableCustom<Long> implements PlatformUser {
 
     @Column(name = "email", nullable = false, length = 100)
     private String email;
diff --git a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUserClientMapping.java b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUserClientMapping.java
index dd3bff37d..2215f58d9 100644
--- a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUserClientMapping.java
+++ b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/AppUserClientMapping.java
@@ -28,7 +28,7 @@ import org.apache.fineract.portfolio.client.domain.Client;
 
 @Entity
 @Table(name = "m_selfservice_user_client_mapping")
-public class AppUserClientMapping extends AbstractPersistableCustom {
+public class AppUserClientMapping extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false, cascade = CascadeType.ALL)
     @JoinColumn(name = "appuser_id", nullable = false)
diff --git a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Permission.java b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Permission.java
index 5441bcfde..06c84c0cf 100644
--- a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Permission.java
+++ b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Permission.java
@@ -26,7 +26,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_permission")
-public class Permission extends AbstractPersistableCustom implements Serializable {
+public class Permission extends AbstractPersistableCustom<Long> implements Serializable {
 
     @Column(name = "grouping", nullable = false, length = 45)
     private String grouping;
diff --git a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Role.java b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Role.java
index 21583af80..9009e273f 100644
--- a/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Role.java
+++ b/fineract-core/src/main/java/org/apache/fineract/useradministration/domain/Role.java
@@ -38,7 +38,7 @@ import org.apache.fineract.useradministration.data.RoleData;
 
 @Entity
 @Table(name = "m_role", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
-public class Role extends AbstractPersistableCustom implements Serializable {
+public class Role extends AbstractPersistableCustom<Long> implements Serializable {
 
     @Column(name = "name", unique = true, nullable = false, length = 100)
     private String name;
diff --git a/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Document.java b/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Document.java
index 8d15327b4..2e3ea9ecd 100644
--- a/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Document.java
+++ b/fineract-document/src/main/java/org/apache/fineract/infrastructure/documentmanagement/domain/Document.java
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.documentmanagement.command.DocumentCom
 
 @Entity
 @Table(name = "m_document")
-public class Document extends AbstractPersistableCustom {
+public class Document extends AbstractPersistableCustom<Long> {
 
     @Column(name = "parent_entity_type", length = 50)
     private String parentEntityType;
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
index 6df9bb0e5..d5d657dd4 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwner.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.ExternalId;
 @Entity
 @NoArgsConstructor
 @Table(name = "m_external_asset_owner")
-public class ExternalAssetOwner extends AbstractAuditableWithUTCDateTimeCustom {
+public class ExternalAssetOwner extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "external_id", nullable = false, length = 100, unique = true)
     private ExternalId externalId;
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerJournalEntryMapping.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerJournalEntryMapping.java
index 3e1ef837d..9cc47e225 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerJournalEntryMapping.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerJournalEntryMapping.java
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Table(name = "m_external_asset_owner_journal_entry_mapping")
 @NoArgsConstructor
 @Entity
-public class ExternalAssetOwnerJournalEntryMapping extends AbstractAuditableWithUTCDateTimeCustom {
+public class ExternalAssetOwnerJournalEntryMapping extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "journal_entry_id", nullable = false)
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
index ab9f7f671..9a63df587 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransfer.java
@@ -41,7 +41,7 @@ import org.apache.fineract.investor.data.ExternalTransferSubStatus;
 @Table(name = "m_external_asset_owner_transfer")
 @NoArgsConstructor
 @Entity
-public class ExternalAssetOwnerTransfer extends AbstractAuditableWithUTCDateTimeCustom {
+public class ExternalAssetOwnerTransfer extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "owner_id", nullable = false)
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferDetails.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferDetails.java
index badfa672d..da1d29727 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferDetails.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferDetails.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Table(name = "m_external_asset_owner_transfer_details")
 @NoArgsConstructor
 @Entity
-public class ExternalAssetOwnerTransferDetails extends AbstractAuditableWithUTCDateTimeCustom {
+public class ExternalAssetOwnerTransferDetails extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @OneToOne(cascade = CascadeType.ALL)
     @JoinColumn(name = "asset_owner_transfer_id", referencedColumnName = "id")
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferJournalEntryMapping.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferJournalEntryMapping.java
index 888a4fd3d..4be09f20b 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferJournalEntryMapping.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferJournalEntryMapping.java
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Table(name = "m_external_asset_owner_transfer_journal_entry_mapping")
 @NoArgsConstructor
 @Entity
-public class ExternalAssetOwnerTransferJournalEntryMapping extends AbstractAuditableWithUTCDateTimeCustom {
+public class ExternalAssetOwnerTransferJournalEntryMapping extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "journal_entry_id", nullable = false)
diff --git a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
index a665665ba..0f6cb1f9b 100644
--- a/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
+++ b/fineract-investor/src/main/java/org/apache/fineract/investor/domain/ExternalAssetOwnerTransferLoanMapping.java
@@ -33,7 +33,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Table(name = "m_external_asset_owner_transfer_loan_mapping")
 @NoArgsConstructor
 @Entity
-public class ExternalAssetOwnerTransferLoanMapping extends AbstractAuditableWithUTCDateTimeCustom {
+public class ExternalAssetOwnerTransferLoanMapping extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "loan_id", nullable = false)
     private Long loanId;
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateral/domain/LoanCollateral.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateral/domain/LoanCollateral.java
index d5a5c4bfc..28ab6a871 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateral/domain/LoanCollateral.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateral/domain/LoanCollateral.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 
 @Entity
 @Table(name = "m_loan_collateral")
-public class LoanCollateral extends AbstractPersistableCustom {
+public class LoanCollateral extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/ClientCollateralManagement.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/ClientCollateralManagement.java
index 0ca15dacb..b97602b5d 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/ClientCollateralManagement.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/ClientCollateralManagement.java
@@ -39,7 +39,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanCollateralManagement
 
 @Entity
 @Table(name = "m_client_collateral_management")
-public class ClientCollateralManagement extends AbstractPersistableCustom {
+public class ClientCollateralManagement extends AbstractPersistableCustom<Long> {
 
     @Column(name = "quantity", nullable = false, scale = 5, precision = 20)
     private BigDecimal quantity;
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/CollateralManagementDomain.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/CollateralManagementDomain.java
index 09420b3b6..30a958a1b 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/CollateralManagementDomain.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/collateralmanagement/domain/CollateralManagementDomain.java
@@ -39,7 +39,7 @@ import org.apache.fineract.portfolio.collateralmanagement.api.CollateralManageme
 
 @Entity
 @Table(name = "m_collateral_management")
-public class CollateralManagementDomain extends AbstractPersistableCustom {
+public class CollateralManagementDomain extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", length = 20, columnDefinition = " ")
     private String name;
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucketMappings.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucketMappings.java
index 96d843108..6fa952832 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucketMappings.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/DelinquencyBucketMappings.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Entity
 @Table(name = "m_delinquency_bucket_mappings", uniqueConstraints = {
         @UniqueConstraint(name = "uq_delinquency_bucket_mapping", columnNames = { "delinquencyBucket", "delinquencyRange" }) })
-public class DelinquencyBucketMappings extends AbstractAuditableWithUTCDateTimeCustom {
+public class DelinquencyBucketMappings extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "delinquency_bucket_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyAction.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyAction.java
index fed9b5c8e..ac0b8808f 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyAction.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyAction.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 @NoArgsConstructor
 @Entity
 @Table(name = "m_loan_delinquency_action")
-public class LoanDelinquencyAction extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanDelinquencyAction extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyTagHistory.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyTagHistory.java
index 97e576f5f..da4bb7e0a 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyTagHistory.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanDelinquencyTagHistory.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.Loan;
 @NoArgsConstructor
 @Entity
 @Table(name = "m_loan_delinquency_tag_history")
-public class LoanDelinquencyTagHistory extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanDelinquencyTagHistory extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "delinquency_range_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanInstallmentDelinquencyTag.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanInstallmentDelinquencyTag.java
index 248c49d51..52adee846 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanInstallmentDelinquencyTag.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/delinquency/domain/LoanInstallmentDelinquencyTag.java
@@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns
 @NoArgsConstructor
 @Entity
 @Table(name = "m_loan_installment_delinquency_tag")
-public class LoanInstallmentDelinquencyTag extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanInstallmentDelinquencyTag extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "delinquency_range_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/GroupLoanIndividualMonitoringAccount.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/GroupLoanIndividualMonitoringAccount.java
index 430ac60b5..52848f8f4 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/GroupLoanIndividualMonitoringAccount.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/GroupLoanIndividualMonitoringAccount.java
@@ -33,7 +33,7 @@ import org.apache.fineract.portfolio.group.domain.Group;
 
 @Entity
 @Table(name = "glim_accounts", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_number" }, name = "FK_glim_id") })
-public class GroupLoanIndividualMonitoringAccount extends AbstractPersistableCustom {
+public class GroupLoanIndividualMonitoringAccount extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "group_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
index 4a8e783d7..b35ddfc55 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/Loan.java
@@ -154,7 +154,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
         @UniqueConstraint(columnNames = { "external_id" }, name = "loan_externalid_UNIQUE") })
 @Setter
 @Getter
-public class Loan extends AbstractAuditableWithUTCDateTimeCustom {
+public class Loan extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     public static final String RECALCULATE_LOAN_SCHEDULE = "recalculateLoanSchedule";
     public static final String EXTERNAL_ID = "externalId";
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
index f81471b04..2b6b18baf 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCharge.java
@@ -60,7 +60,7 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanInstallmentChargeData;
 
 @Entity
 @Table(name = "m_loan_charge", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id") })
-public class LoanCharge extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanCharge extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargePaidBy.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargePaidBy.java
index c483338f3..e70a9f521 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargePaidBy.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanChargePaidBy.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_loan_charge_paid_by")
-public class LoanChargePaidBy extends AbstractPersistableCustom {
+public class LoanChargePaidBy extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_transaction_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java
index 6a65ad450..9b180b8f2 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCollateralManagement.java
@@ -30,7 +30,7 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanCollateralManagementDa
 
 @Entity
 @Table(name = "m_loan_collateral_management")
-public class LoanCollateralManagement extends AbstractPersistableCustom {
+public class LoanCollateralManagement extends AbstractPersistableCustom<Long> {
 
     @Column(name = "quantity", nullable = false, scale = 5, precision = 20)
     private BigDecimal quantity;
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCreditAllocationRule.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCreditAllocationRule.java
index 6707c9d35..b61b4a017 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCreditAllocationRule.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanCreditAllocationRule.java
@@ -46,7 +46,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.CreditAllocationTransact
         @UniqueConstraint(columnNames = { "loan_id", "transaction_type" }, name = "uq_m_loan_credit_allocation_rule") })
 @AllArgsConstructor
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
-public class LoanCreditAllocationRule extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanCreditAllocationRule extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java
index a37fd0e2c..08dc564b8 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanDisbursementDetails.java
@@ -32,7 +32,7 @@ import org.apache.fineract.portfolio.loanaccount.data.DisbursementData;
 
 @Entity
 @Table(name = "m_loan_disbursement_detail")
-public class LoanDisbursementDetails extends AbstractPersistableCustom {
+public class LoanDisbursementDetails extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
index 1b962a903..6582464e4 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInstallmentCharge.java
@@ -32,7 +32,7 @@ import org.apache.fineract.portfolio.loanaccount.data.LoanInstallmentChargeData;
 
 @Entity
 @Table(name = "m_loan_installment_charge")
-public class LoanInstallmentCharge extends AbstractPersistableCustom implements Comparable<LoanInstallmentCharge> {
+public class LoanInstallmentCharge extends AbstractPersistableCustom<Long> implements Comparable<LoanInstallmentCharge> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java
index 9afd57ea6..17886d9e4 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalcualtionAdditionalDetails.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_loan_interest_recalculation_additional_details")
-public class LoanInterestRecalcualtionAdditionalDetails extends AbstractPersistableCustom {
+public class LoanInterestRecalcualtionAdditionalDetails extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_repayment_schedule_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalculationDetails.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalculationDetails.java
index 742b42645..5da30a483 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalculationDetails.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanInterestRecalculationDetails.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.RecalculationFrequencyTy
 
 @Entity
 @Table(name = "m_loan_recalculation_details")
-public class LoanInterestRecalculationDetails extends AbstractPersistableCustom {
+public class LoanInterestRecalculationDetails extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOverdueInstallmentCharge.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOverdueInstallmentCharge.java
index 4e20b6fa6..361a49da1 100755
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOverdueInstallmentCharge.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanOverdueInstallmentCharge.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Entity
 @Getter
 @Table(name = "m_loan_overdue_installment_charge")
-public class LoanOverdueInstallmentCharge extends AbstractPersistableCustom {
+public class LoanOverdueInstallmentCharge extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanPaymentAllocationRule.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanPaymentAllocationRule.java
index d580817fc..b4f20b614 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanPaymentAllocationRule.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanPaymentAllocationRule.java
@@ -47,7 +47,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.PaymentAllocationTypeLis
         @UniqueConstraint(columnNames = { "loan_id", "transaction_type" }, name = "uq_m_loan_payment_allocation_rule") })
 @AllArgsConstructor
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
-public class LoanPaymentAllocationRule extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanPaymentAllocationRule extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java
index c1ff29222..97c2ea015 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRepaymentScheduleInstallment.java
@@ -40,7 +40,7 @@ import org.apache.fineract.portfolio.repaymentwithpostdatedchecks.domain.PostDat
 
 @Entity
 @Table(name = "m_loan_repayment_schedule")
-public class LoanRepaymentScheduleInstallment extends AbstractAuditableWithUTCDateTimeCustom
+public class LoanRepaymentScheduleInstallment extends AbstractAuditableWithUTCDateTimeCustom<Long>
         implements Comparable<LoanRepaymentScheduleInstallment> {
 
     @ManyToOne(optional = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java
index 91285e8e4..4e1f57038 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanRescheduleRequestToTermVariationMapping.java
@@ -28,7 +28,7 @@ import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanResch
 
 @Entity
 @Table(name = "m_loan_reschedule_request_term_variations_mapping")
-public class LoanRescheduleRequestToTermVariationMapping extends AbstractPersistableCustom {
+public class LoanRescheduleRequestToTermVariationMapping extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false, cascade = CascadeType.ALL)
     @JoinColumn(name = "loan_reschedule_request_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanStatusChangeHistory.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanStatusChangeHistory.java
index 371a0915e..d37e609fe 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanStatusChangeHistory.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanStatusChangeHistory.java
@@ -38,7 +38,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Getter
 @AllArgsConstructor
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
-public class LoanStatusChangeHistory extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanStatusChangeHistory extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java
index 1e56131a1..d5f41828d 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTermVariations.java
@@ -34,7 +34,7 @@ import org.apache.fineract.portfolio.loanproduct.service.LoanEnumerations;
 
 @Entity
 @Table(name = "m_loan_term_variations")
-public class LoanTermVariations extends AbstractPersistableCustom {
+public class LoanTermVariations extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java
index 4c7954596..554a3e203 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTopupDetails.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_loan_topup")
-public class LoanTopupDetails extends AbstractPersistableCustom {
+public class LoanTopupDetails extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java
index d2a31909e..5e0fca7ce 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheCharge.java
@@ -28,7 +28,7 @@ import org.apache.fineract.portfolio.charge.domain.Charge;
 
 @Entity
 @Table(name = "m_loan_tranche_charges")
-public class LoanTrancheCharge extends AbstractPersistableCustom {
+public class LoanTrancheCharge extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(cascade = CascadeType.ALL, optional = false)
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java
index c796321f6..e5ab289d3 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTrancheDisbursementCharge.java
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_loan_tranche_disbursement_charge")
-public class LoanTrancheDisbursementCharge extends AbstractPersistableCustom {
+public class LoanTrancheDisbursementCharge extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_charge_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
index 8b25e7e44..789407016 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransaction.java
@@ -60,7 +60,7 @@ import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
  */
 @Entity
 @Table(name = "m_loan_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE") })
-public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRelation.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRelation.java
index c76f73b81..d74f7757c 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRelation.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionRelation.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
 @Getter
 @Entity
 @Table(name = "m_loan_transaction_relation")
-public class LoanTransactionRelation extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanTransactionRelation extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "from_loan_transaction_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java
index 7763d2cb4..3249b4d1f 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/LoanTransactionToRepaymentScheduleMapping.java
@@ -31,7 +31,7 @@ import org.apache.fineract.organisation.monetary.domain.Money;
 
 @Entity
 @Table(name = "m_loan_transaction_repayment_schedule_mapping")
-public class LoanTransactionToRepaymentScheduleMapping extends AbstractPersistableCustom {
+public class LoanTransactionToRepaymentScheduleMapping extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false, cascade = CascadeType.PERSIST)
     @JoinColumn(name = "loan_transaction_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/reaging/LoanReAgeParameter.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/reaging/LoanReAgeParameter.java
index f62b1f88e..84b0ee333 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/reaging/LoanReAgeParameter.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/domain/reaging/LoanReAgeParameter.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanTransaction;
 @Table(name = "m_loan_reage_parameter")
 @AllArgsConstructor
 @Getter
-public class LoanReAgeParameter extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanReAgeParameter extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "loan_transaction_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
index 662841600..b2f52da58 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanResch
 
 @Entity
 @Table(name = "m_loan_repayment_schedule_history")
-public class LoanRepaymentScheduleHistory extends AbstractPersistableCustom {
+public class LoanRepaymentScheduleHistory extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_id")
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java
index 9068d3572..d7eb19a7c 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanaccount/rescheduleloan/domain/LoanRescheduleRequest.java
@@ -40,7 +40,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "m_loan_reschedule_request")
-public class LoanRescheduleRequest extends AbstractPersistableCustom {
+public class LoanRescheduleRequest extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java
index b7d7191a5..dd3f7d99d 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProduct.java
@@ -84,7 +84,7 @@ import org.apache.fineract.portfolio.rate.domain.Rate;
 @Table(name = "m_product_loan", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name"),
         @UniqueConstraint(columnNames = { "external_id" }, name = "external_id_UNIQUE"),
         @UniqueConstraint(columnNames = { "short_name" }, name = "unq_short_name") })
-public class LoanProduct extends AbstractPersistableCustom {
+public class LoanProduct extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "fund_id")
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java
index 7b4400520..09ee218bd 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductBorrowerCycleVariations.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_product_loan_variations_borrower_cycle")
-public class LoanProductBorrowerCycleVariations extends AbstractPersistableCustom {
+public class LoanProductBorrowerCycleVariations extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java
index 9902028c5..ffde89ff1 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductConfigurableAttributes.java
@@ -31,7 +31,7 @@ import org.apache.fineract.portfolio.loanproduct.LoanProductConstants;
 
 @Entity
 @Table(name = "m_product_loan_configurable_attributes")
-public class LoanProductConfigurableAttributes extends AbstractPersistableCustom implements Serializable {
+public class LoanProductConfigurableAttributes extends AbstractPersistableCustom<Long> implements Serializable {
 
     @OneToOne
     @JoinColumn(name = "loan_product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductCreditAllocationRule.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductCreditAllocationRule.java
index 961229cc7..31024d7aa 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductCreditAllocationRule.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductCreditAllocationRule.java
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
         @UniqueConstraint(columnNames = { "loan_product_id", "transaction_type" }, name = "uq_m_loan_product_credit_allocation_rule") })
 @AllArgsConstructor
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
-public class LoanProductCreditAllocationRule extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanProductCreditAllocationRule extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java
index 1c29cc270..6ab89e8d8 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductFloatingRates.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.floatingrates.domain.FloatingRate;
 
 @Entity
 @Table(name = "m_product_loan_floating_rates")
-public class LoanProductFloatingRates extends AbstractPersistableCustom {
+public class LoanProductFloatingRates extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "loan_product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java
index 1cf04c6cf..5855dc15a 100755
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductGuaranteeDetails.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.loanproduct.LoanProductConstants;
 
 @Entity
 @Table(name = "m_product_loan_guarantee_details")
-public class LoanProductGuaranteeDetails extends AbstractPersistableCustom {
+public class LoanProductGuaranteeDetails extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "loan_product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java
index 042240379..b46c1bae5 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductInterestRecalculationDetails.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.loanproduct.LoanProductConstants;
 
 @Entity
 @Table(name = "m_product_loan_recalculation_details")
-public class LoanProductInterestRecalculationDetails extends AbstractPersistableCustom {
+public class LoanProductInterestRecalculationDetails extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductPaymentAllocationRule.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductPaymentAllocationRule.java
index 227210897..ae26834eb 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductPaymentAllocationRule.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductPaymentAllocationRule.java
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractAuditableWithUTCDa
         @UniqueConstraint(columnNames = { "loan_product_id", "transaction_type" }, name = "uq_m_loan_product_payment_allocation_rule") })
 @AllArgsConstructor
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
-public class LoanProductPaymentAllocationRule extends AbstractAuditableWithUTCDateTimeCustom {
+public class LoanProductPaymentAllocationRule extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_product_id", nullable = false)
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java
index 8182e6159..53922b3c9 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/loanproduct/domain/LoanProductVariableInstallmentConfig.java
@@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.loanproduct.LoanProductConstants;
 @NoArgsConstructor
 @AllArgsConstructor
 @Table(name = "m_product_loan_variable_installment_config")
-public class LoanProductVariableInstallmentConfig extends AbstractPersistableCustom {
+public class LoanProductVariableInstallmentConfig extends AbstractPersistableCustom<Long> {
 
     @Setter
     @OneToOne
diff --git a/fineract-loan/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/domain/PostDatedChecks.java b/fineract-loan/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/domain/PostDatedChecks.java
index 5b3c76894..ac4f50094 100644
--- a/fineract-loan/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/domain/PostDatedChecks.java
+++ b/fineract-loan/src/main/java/org/apache/fineract/portfolio/repaymentwithpostdatedchecks/domain/PostDatedChecks.java
@@ -34,7 +34,7 @@ import org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns
 
 @Entity
 @Table(name = "m_repayment_with_post_dated_checks")
-public class PostDatedChecks extends AbstractPersistableCustom {
+public class PostDatedChecks extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "loan_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java b/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
index 24979b4bc..551ae9cbd 100644
--- a/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
+++ b/fineract-progressive-loan/src/test/java/org/apache/fineract/portfolio/loanaccount/domain/transactionprocessor/impl/AdvancedPaymentScheduleTransactionProcessorTest.java
@@ -465,6 +465,7 @@ class AdvancedPaymentScheduleTransactionProcessorTest {
         Money money = Money.of(MONETARY_CURRENCY, BigDecimal.valueOf(transactionAmount));
         lenient().when(chargeback.getAmount(MONETARY_CURRENCY)).thenReturn(money);
         lenient().when(chargeback.getTransactionDate()).thenReturn(LocalDate.of(2023, 1, 1));
+        lenient().when(chargeback.getId()).thenReturn(1L);
         return chargeback;
     }
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
index d696545b7..2315b13ee 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/LoanProductProvisioningEntry.java
@@ -41,7 +41,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 @Accessors(chain = true)
 @Entity
 @Table(name = "m_loanproduct_provisioning_entry")
-public class LoanProductProvisioningEntry extends AbstractPersistableCustom {
+public class LoanProductProvisioningEntry extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "history_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
index a5a2e7871..10084c941 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/accounting/provisioning/domain/ProvisioningEntry.java
@@ -43,7 +43,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 @Accessors(chain = true)
 @Entity
 @Table(name = "m_provisioning_history")
-public class ProvisioningEntry extends AbstractPersistableCustom {
+public class ProvisioningEntry extends AbstractPersistableCustom<Long> {
 
     @Column(name = "journal_entry_created")
     private Boolean isJournalEntryCreated;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java b/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java
index 1ab1d82e8..8cb41c46f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepService.java
@@ -26,9 +26,9 @@ import org.jetbrains.annotations.NotNull;
 
 public interface COBBusinessStepService {
 
-    <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom> S run(TreeMap<Long, String> executionMap, S item);
+    <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> S run(TreeMap<Long, String> executionMap, S item);
 
     @NotNull
-    <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom> Set<BusinessStepNameAndOrder> getCOBBusinessSteps(
+    <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> Set<BusinessStepNameAndOrder> getCOBBusinessSteps(
             Class<T> businessStepClass, String cobJobName);
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java b/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java
index 29890bd5f..9ec3d7393 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/COBBusinessStepServiceImpl.java
@@ -56,7 +56,7 @@ public class COBBusinessStepServiceImpl implements COBBusinessStepService {
 
     @SuppressWarnings({ "unchecked" })
     @Override
-    public <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom> S run(TreeMap<Long, String> executionMap, S item) {
+    public <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> S run(TreeMap<Long, String> executionMap, S item) {
         if (executionMap == null || executionMap.isEmpty()) {
             throw new BusinessStepException("Execution map is empty! COB Business step execution skipped!");
         }
@@ -94,7 +94,7 @@ public class COBBusinessStepServiceImpl implements COBBusinessStepService {
 
     @NotNull
     @Override
-    public <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom> Set<BusinessStepNameAndOrder> getCOBBusinessSteps(
+    public <T extends COBBusinessStep<S>, S extends AbstractPersistableCustom<Long>> Set<BusinessStepNameAndOrder> getCOBBusinessSteps(
             Class<T> businessStepClass, String cobJobName) {
         List<BatchBusinessStep> cobStepConfigs = batchBusinessStepRepository.findAllByJobName(cobJobName);
         List<String> businessSteps = Arrays.stream(beanFactory.getBeanNamesForType(businessStepClass)).toList();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java b/fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java
index 7263f1f6e..f3d95f7e2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/domain/BatchBusinessStep.java
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @NoArgsConstructor
 @Getter
 @Setter
-public class BatchBusinessStep extends AbstractPersistableCustom {
+public class BatchBusinessStep extends AbstractPersistableCustom<Long> {
 
     @Column(name = "job_name", nullable = false)
     private String jobName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanReloadService.java b/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanReloadService.java
index 4e86b0d01..ddff5dd01 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanReloadService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/service/LoanReloadService.java
@@ -31,7 +31,7 @@ public class LoanReloadService implements ReloadService<Loan> {
     private final LoanAssembler loanAssembler;
 
     @Override
-    public <S extends AbstractPersistableCustom> boolean canReload(S input) {
+    public <S extends AbstractPersistableCustom<Long>> boolean canReload(S input) {
         return input instanceof Loan;
     }
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloadService.java b/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloadService.java
index eec0033fc..007d77350 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloadService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloadService.java
@@ -20,9 +20,9 @@ package org.apache.fineract.cob.service;
 
 import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
-public interface ReloadService<S extends AbstractPersistableCustom> {
+public interface ReloadService<S extends AbstractPersistableCustom<Long>> {
 
-    <X extends AbstractPersistableCustom> boolean canReload(X input);
+    <X extends AbstractPersistableCustom<Long>> boolean canReload(X input);
 
     S reload(S input);
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloaderService.java b/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloaderService.java
index 79824dc74..a8579cb93 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloaderService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/cob/service/ReloaderService.java
@@ -30,7 +30,7 @@ public class ReloaderService {
 
     private final List<ReloadService> reloadServices;
 
-    public <S extends AbstractPersistableCustom> S reload(S input) {
+    public <S extends AbstractPersistableCustom<Long>> S reload(S input) {
         for (ReloadService reloadService : reloadServices) {
             if (reloadService.canReload(input)) {
                 return (S) reloadService.reload(input);
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
index c4181f376..aaec7836c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/accountnumberformat/domain/AccountNumberFormat.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Entity
 @Table(name = AccountNumberFormatConstants.ACCOUNT_NUMBER_FORMAT_TABLE_NAME, uniqueConstraints = { @UniqueConstraint(columnNames = {
         AccountNumberFormatConstants.ACCOUNT_TYPE_ENUM_COLUMN_NAME }, name = AccountNumberFormatConstants.ACCOUNT_TYPE_UNIQUE_CONSTRAINT_NAME) })
-public class AccountNumberFormat extends AbstractPersistableCustom {
+public class AccountNumberFormat extends AbstractPersistableCustom<Long> {
 
     @Column(name = AccountNumberFormatConstants.ACCOUNT_TYPE_ENUM_COLUMN_NAME, nullable = false)
     private Integer accountTypeEnum;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java
index 139802962..259aac1c3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/bulkimport/domain/ImportDocument.java
@@ -32,7 +32,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "m_import_document")
-public class ImportDocument extends AbstractPersistableCustom {
+public class ImportDocument extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "document_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java
index 7af4a580d..b17d50998 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailCampaign.java
@@ -53,7 +53,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class EmailCampaign extends AbstractPersistableCustom {
+public class EmailCampaign extends AbstractPersistableCustom<Long> {
 
     @Column(name = "campaign_name", nullable = false)
     private String campaignName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailConfiguration.java
index b15fe274d..d40ff9a04 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailConfiguration.java
@@ -33,7 +33,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class EmailConfiguration extends AbstractPersistableCustom {
+public class EmailConfiguration extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false)
     private String name;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java
index bfe38fcdc..32d6db4a0 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/email/domain/EmailMessage.java
@@ -44,7 +44,7 @@ import org.apache.fineract.portfolio.group.domain.Group;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class EmailMessage extends AbstractPersistableCustom {
+public class EmailMessage extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "group_id", nullable = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java
index f230d0bc8..4c472abdf 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/campaigns/sms/domain/SmsCampaign.java
@@ -49,7 +49,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "sms_campaign", uniqueConstraints = { @UniqueConstraint(columnNames = { "campaign_name" }, name = "campaign_name_UNIQUE") })
-public class SmsCampaign extends AbstractPersistableCustom {
+public class SmsCampaign extends AbstractPersistableCustom<Long> {
 
     @Column(name = "campaign_name", nullable = false)
     private String campaignName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
index d96473fea..6ca584596 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/ExternalService.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class ExternalService extends AbstractPersistableCustom {
+public class ExternalService extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", length = 50)
     private String name;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
index a38401d24..89b3707e9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/configuration/domain/GlobalConfigurationProperty.java
@@ -40,7 +40,7 @@ import org.apache.fineract.infrastructure.security.exception.ForcePasswordResetE
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class GlobalConfigurationProperty extends AbstractPersistableCustom {
+public class GlobalConfigurationProperty extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false)
     private String name;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureau.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureau.java
index 900655c8d..347da14e2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureau.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureau.java
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class CreditBureau extends AbstractPersistableCustom {
+public class CreditBureau extends AbstractPersistableCustom<Long> {
 
     private String name;
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauConfiguration.java
index 52b089bb8..260cb07b9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauConfiguration.java
@@ -39,7 +39,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class CreditBureauConfiguration extends AbstractPersistableCustom {
+public class CreditBureauConfiguration extends AbstractPersistableCustom<Long> {
 
     @Column(name = "configkey")
     private String configurationKey;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauLoanProductMapping.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauLoanProductMapping.java
index 88db31ebd..c2d2cc088 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauLoanProductMapping.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauLoanProductMapping.java
@@ -39,7 +39,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class CreditBureauLoanProductMapping extends AbstractPersistableCustom {
+public class CreditBureauLoanProductMapping extends AbstractPersistableCustom<Long> {
 
     @Column(name = "is_credit_check_mandatory")
     private boolean creditCheckMandatory;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauToken.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauToken.java
index 793ef1dd1..ba536c027 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauToken.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditBureauToken.java
@@ -40,7 +40,7 @@ import org.slf4j.LoggerFactory;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class CreditBureauToken extends AbstractPersistableCustom {
+public class CreditBureauToken extends AbstractPersistableCustom<Long> {
 
     private static final Logger LOG = LoggerFactory.getLogger(CreditBureauToken.class);
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditReport.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditReport.java
index e377cc6ab..521084008 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditReport.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/CreditReport.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Getter
 @Setter
 @Accessors(chain = true)
-public class CreditReport extends AbstractPersistableCustom {
+public class CreditReport extends AbstractPersistableCustom<Long> {
 
     @Column(name = "credit_bureau_id")
     private Long creditBureauId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/OrganisationCreditBureau.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/OrganisationCreditBureau.java
index 360d92591..4c29203da 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/OrganisationCreditBureau.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/creditbureau/domain/OrganisationCreditBureau.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_organisation_creditbureau")
-public class OrganisationCreditBureau extends AbstractPersistableCustom {
+public class OrganisationCreditBureau extends AbstractPersistableCustom<Long> {
 
     private String alias;
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/EntityDatatableChecks.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/EntityDatatableChecks.java
index 442d28e67..50aeba4d4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/EntityDatatableChecks.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/EntityDatatableChecks.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Getter
 @Entity
 @Table(name = "m_entity_datatable_check")
-public class EntityDatatableChecks extends AbstractPersistableCustom {
+public class EntityDatatableChecks extends AbstractPersistableCustom<Long> {
 
     @Column(name = "application_table_name", nullable = false)
     private String entity;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/RegisteredDatatable.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/RegisteredDatatable.java
index 556eb379f..d75590e30 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/RegisteredDatatable.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/RegisteredDatatable.java
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @AllArgsConstructor
 @Entity
 @Table(name = "x_registered_table")
-public class RegisteredDatatable extends AbstractPersistableCustom {
+public class RegisteredDatatable extends AbstractPersistableCustom<Long> {
 
     @Column(name = "registered_table_name", nullable = false)
     private String datatableName;
@@ -46,5 +46,4 @@ public class RegisteredDatatable extends AbstractPersistableCustom {
     private int category;
 
     public RegisteredDatatable() {}
-
 }
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
index 9c7cd3e97..8c1332bdc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/Report.java
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.core.exception.PlatformDataIntegrityEx
 
 @Entity
 @Table(name = "stretchy_report", uniqueConstraints = { @UniqueConstraint(columnNames = { "report_name" }, name = "unq_report_name") })
-public final class Report extends AbstractPersistableCustom {
+public final class Report extends AbstractPersistableCustom<Long> {
 
     @Column(name = "report_name", nullable = false, unique = true)
     private String reportName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameter.java
index 6500359a3..b89b9e49f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameter.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameter.java
@@ -24,7 +24,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "stretchy_parameter")
-public class ReportParameter extends AbstractPersistableCustom {
+public class ReportParameter extends AbstractPersistableCustom<Long> {
 
     protected ReportParameter() {
         //
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameterUsage.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameterUsage.java
index 963a2fbe7..3ef8076e6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameterUsage.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/dataqueries/domain/ReportParameterUsage.java
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "stretchy_report_parameter")
-public final class ReportParameterUsage extends AbstractPersistableCustom {
+public final class ReportParameterUsage extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "report_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityAccess.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityAccess.java
index ad60bb8c9..f3184a71c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityAccess.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityAccess.java
@@ -40,7 +40,7 @@ import org.apache.fineract.infrastructure.entityaccess.FineractEntityAccessConst
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class FineractEntityAccess extends AbstractPersistableCustom {
+public class FineractEntityAccess extends AbstractPersistableCustom<Long> {
 
     @Column(name = "entity_type", length = 50)
     private String entityType;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityRelation.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityRelation.java
index 9aaf1e89b..2c4d07eb5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityRelation.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityRelation.java
@@ -37,7 +37,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class FineractEntityRelation extends AbstractPersistableCustom {
+public class FineractEntityRelation extends AbstractPersistableCustom<Long> {
 
     @OneToMany(cascade = CascadeType.ALL, mappedBy = "relationId", orphanRemoval = true)
     private Set<FineractEntityToEntityMapping> fineractEntityToEntityMapping = new HashSet<>();
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityToEntityMapping.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityToEntityMapping.java
index 4ed6d7e61..382ed09c3 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityToEntityMapping.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/entityaccess/domain/FineractEntityToEntityMapping.java
@@ -43,7 +43,7 @@ import org.apache.fineract.infrastructure.entityaccess.exception.FineractEntityT
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class FineractEntityToEntityMapping extends AbstractPersistableCustom {
+public class FineractEntityToEntityMapping extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "rel_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java
index 63d2d9f26..6e13887b4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/gcm/domain/DeviceRegistration.java
@@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.client.domain.Client;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class DeviceRegistration extends AbstractPersistableCustom {
+public class DeviceRegistration extends AbstractPersistableCustom<Long> {
 
     @OneToOne
     @JoinColumn(name = "client_id", nullable = false, unique = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookConfiguration.java
index e8f8dbc9f..013a59661 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookConfiguration.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class HookConfiguration extends AbstractPersistableCustom {
+public class HookConfiguration extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "hook_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookResource.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookResource.java
index 16bb09e25..c9074112f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookResource.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookResource.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class HookResource extends AbstractPersistableCustom {
+public class HookResource extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "hook_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookTemplate.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookTemplate.java
index 615373a66..ced927679 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookTemplate.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/HookTemplate.java
@@ -42,7 +42,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public final class HookTemplate extends AbstractPersistableCustom {
+public final class HookTemplate extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false, length = 100)
     private String name;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/Schema.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/Schema.java
index 3cec6d1c9..c2c3ee98f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/Schema.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/hooks/domain/Schema.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class Schema extends AbstractPersistableCustom {
+public class Schema extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "hook_template_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java
index 607b3bc43..8f8da874b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/CustomJobParameter.java
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @NoArgsConstructor
 @Getter
 @Setter
-public class CustomJobParameter extends AbstractPersistableCustom {
+public class CustomJobParameter extends AbstractPersistableCustom<Long> {
 
     @Column(name = "parameter_json", nullable = false, columnDefinition = "json")
     private String parameterJson;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/JobParameter.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/JobParameter.java
index 43110acb9..ebd806a33 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/JobParameter.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/JobParameter.java
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class JobParameter extends AbstractPersistableCustom {
+public class JobParameter extends AbstractPersistableCustom<Long> {
 
     @Column(name = "job_id", nullable = false)
     private Long jobId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobDetail.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobDetail.java
index 6394af768..036b8536b 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobDetail.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobDetail.java
@@ -41,7 +41,7 @@ import org.apache.fineract.infrastructure.jobs.api.SchedulerJobApiConstants;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class ScheduledJobDetail extends AbstractPersistableCustom {
+public class ScheduledJobDetail extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name")
     private String jobName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobRunHistory.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobRunHistory.java
index f2bf4649e..bad0867f8 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobRunHistory.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/ScheduledJobRunHistory.java
@@ -38,7 +38,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class ScheduledJobRunHistory extends AbstractPersistableCustom {
+public class ScheduledJobRunHistory extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "job_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/SchedulerDetail.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/SchedulerDetail.java
index 540ac4117..fcd3f41ca 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/SchedulerDetail.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/jobs/domain/SchedulerDetail.java
@@ -33,7 +33,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class SchedulerDetail extends AbstractPersistableCustom {
+public class SchedulerDetail extends AbstractPersistableCustom<Long> {
 
     @Column(name = "execute_misfired_jobs")
     private boolean executeInstructionForMisfiredJobs;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobConfiguration.java
index 3958d9161..59296ee33 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobConfiguration.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class ReportMailingJobConfiguration extends AbstractPersistableCustom {
+public class ReportMailingJobConfiguration extends AbstractPersistableCustom<Long> {
 
     private static final long serialVersionUID = 3099279770861263184L;
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java
index 83a0f9f45..dd0598a19 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/reportmailingjob/domain/ReportMailingJobRunHistory.java
@@ -36,7 +36,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class ReportMailingJobRunHistory extends AbstractPersistableCustom {
+public class ReportMailingJobRunHistory extends AbstractPersistableCustom<Long> {
 
     private static final long serialVersionUID = -3757370929988421076L;
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java
index 5564fcbeb..1bb5e60e6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TFAccessToken.java
@@ -41,7 +41,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class TFAccessToken extends AbstractPersistableCustom {
+public class TFAccessToken extends AbstractPersistableCustom<Long> {
 
     @Column(name = "token", nullable = false, length = 32)
     private String token;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TwoFactorConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TwoFactorConfiguration.java
index 4f6de00b5..7b5109630 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TwoFactorConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/security/domain/TwoFactorConfiguration.java
@@ -37,7 +37,7 @@ import org.apache.fineract.infrastructure.security.constants.TwoFactorConfigurat
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class TwoFactorConfiguration extends AbstractPersistableCustom {
+public class TwoFactorConfiguration extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false, length = 32)
     private String name;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java
index d46826f06..6e0ed867a 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/sms/domain/SmsMessage.java
@@ -47,7 +47,7 @@ import org.apache.fineract.portfolio.group.domain.Group;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class SmsMessage extends AbstractPersistableCustom {
+public class SmsMessage extends AbstractPersistableCustom<Long> {
 
     @Column(name = "external_id")
     private String externalId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/domain/Likelihood.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/domain/Likelihood.java
index 330dfa064..360e48aa9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/domain/Likelihood.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/survey/domain/Likelihood.java
@@ -38,7 +38,7 @@ import org.apache.fineract.infrastructure.survey.data.LikelihoodStatus;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public final class Likelihood extends AbstractPersistableCustom {
+public final class Likelihood extends AbstractPersistableCustom<Long> {
 
     @Column(name = "ppi_name", nullable = false)
     private String ppiName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/mix/domain/MixTaxonomyMapping.java b/fineract-provider/src/main/java/org/apache/fineract/mix/domain/MixTaxonomyMapping.java
index 514277f3a..dbeb13183 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/mix/domain/MixTaxonomyMapping.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/mix/domain/MixTaxonomyMapping.java
@@ -35,7 +35,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public final class MixTaxonomyMapping extends AbstractPersistableCustom {
+public final class MixTaxonomyMapping extends AbstractPersistableCustom<Long> {
 
     @Column(name = "identifier")
     private String identifier;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/domain/Notification.java b/fineract-provider/src/main/java/org/apache/fineract/notification/domain/Notification.java
index 78a549ab7..05888d1e2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/notification/domain/Notification.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/notification/domain/Notification.java
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class Notification extends AbstractPersistableCustom {
+public class Notification extends AbstractPersistableCustom<Long> {
 
     @Column(name = "object_type")
     private String objectType;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/notification/domain/NotificationMapper.java b/fineract-provider/src/main/java/org/apache/fineract/notification/domain/NotificationMapper.java
index f38cccc76..a5137f199 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/notification/domain/NotificationMapper.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/notification/domain/NotificationMapper.java
@@ -37,7 +37,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 @Setter
 @NoArgsConstructor
 @Accessors(chain = true)
-public class NotificationMapper extends AbstractPersistableCustom {
+public class NotificationMapper extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "notification_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java
index f44967c8b..c4e456eb4 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/office/domain/OfficeTransaction.java
@@ -34,7 +34,7 @@ import org.apache.fineract.organisation.monetary.domain.Money;
 
 @Entity
 @Table(name = "m_office_transaction")
-public class OfficeTransaction extends AbstractPersistableCustom {
+public class OfficeTransaction extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "from_office_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java
index de52516b1..14f4acf99 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/LoanProductProvisionCriteria.java
@@ -29,7 +29,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 @Entity
 @Table(name = "m_loanproduct_provisioning_mapping", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "product_id" }, name = "product_id") })
-public class LoanProductProvisionCriteria extends AbstractPersistableCustom {
+public class LoanProductProvisionCriteria extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "criteria_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java
index 2bdf82193..8e2ad1f51 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCategory.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_provision_category", uniqueConstraints = { @UniqueConstraint(columnNames = { "category_name" }, name = "category_name") })
-public class ProvisioningCategory extends AbstractPersistableCustom {
+public class ProvisioningCategory extends AbstractPersistableCustom<Long> {
 
     @Column(name = "category_name", nullable = false, unique = true)
     private String categoryName;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java
index d557e8c9e..de5c3ac14 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteriaDefinition.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_provisioning_criteria_definition")
-public class ProvisioningCriteriaDefinition extends AbstractPersistableCustom {
+public class ProvisioningCriteriaDefinition extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "criteria_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java
index ee7d5439b..15e83161d 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountAssociations.java
@@ -29,7 +29,7 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
 
 @Entity
 @Table(name = "m_portfolio_account_associations")
-public class AccountAssociations extends AbstractPersistableCustom {
+public class AccountAssociations extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_account_id", nullable = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java
index a57262422..ff9b535a2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferDetails.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
 
 @Entity
 @Table(name = "m_account_transfer_details")
-public class AccountTransferDetails extends AbstractPersistableCustom {
+public class AccountTransferDetails extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "from_office_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java
index d528c23e6..fb4373087 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferStandingInstruction.java
@@ -54,7 +54,7 @@ import org.apache.fineract.portfolio.common.domain.PeriodFrequencyType;
 @Entity
 @Table(name = "m_account_transfer_standing_instructions", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "name" }, name = "name") })
-public class AccountTransferStandingInstruction extends AbstractPersistableCustom {
+public class AccountTransferStandingInstruction extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "account_transfer_details_id", nullable = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java
index cb6608741..6b0cf1553 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/account/domain/AccountTransferTransaction.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccountTransaction;
 @Entity
 @Table(name = "m_account_transfer_transaction")
 @Getter
-public class AccountTransferTransaction extends AbstractPersistableCustom {
+public class AccountTransferTransaction extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "account_transfer_details_id", nullable = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java
index 7405b3344..a3a3026fc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/Address.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.client.domain.ClientAddress;
 
 @Entity
 @Table(name = "m_address")
-public class Address extends AbstractPersistableCustom {
+public class Address extends AbstractPersistableCustom<Long> {
 
     /*
      * @OneToMany(mappedBy = "address", cascade = CascadeType.ALL) private List<ClientAddress> clientaddress = new
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java
index f73516adc..30c01c0b6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/address/domain/FieldConfiguration.java
@@ -24,7 +24,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_field_configuration")
-public class FieldConfiguration extends AbstractPersistableCustom {
+public class FieldConfiguration extends AbstractPersistableCustom<Long> {
 
     private String entity;
 
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java
index ab0f04c69..ceb905150 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientAddress.java
@@ -29,7 +29,7 @@ import org.apache.fineract.portfolio.address.domain.Address;
 
 @Entity
 @Table(name = "m_client_address")
-public class ClientAddress extends AbstractPersistableCustom {
+public class ClientAddress extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     private Client client;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java
index 0b774946f..237e094fc 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientCharge.java
@@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 
 @Entity
 @Table(name = "m_client_charge")
-public class ClientCharge extends AbstractPersistableCustom {
+public class ClientCharge extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "client_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientChargePaidBy.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientChargePaidBy.java
index b622b0c3d..435d37305 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientChargePaidBy.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientChargePaidBy.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_client_charge_paid_by")
-public class ClientChargePaidBy extends AbstractPersistableCustom {
+public class ClientChargePaidBy extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_transaction_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientFamilyMembers.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientFamilyMembers.java
index 692087018..5517b42a5 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientFamilyMembers.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientFamilyMembers.java
@@ -30,7 +30,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_family_members")
-public class ClientFamilyMembers extends AbstractPersistableCustom {
+public class ClientFamilyMembers extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java
index b4367a3bb..776421985 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientNonPerson.java
@@ -41,7 +41,7 @@ import org.apache.fineract.portfolio.client.api.ClientApiConstants;
 
 @Entity
 @Table(name = "m_client_non_person")
-public class ClientNonPerson extends AbstractPersistableCustom {
+public class ClientNonPerson extends AbstractPersistableCustom<Long> {
 
     @OneToOne(optional = false)
     @JoinColumn(name = "client_id", referencedColumnName = "id", nullable = false, unique = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java
index b7b29906b..d8828238d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransaction.java
@@ -49,7 +49,7 @@ import org.apache.fineract.portfolio.paymentdetail.domain.PaymentDetail;
 
 @Entity
 @Table(name = "m_client_transaction", uniqueConstraints = { @UniqueConstraint(columnNames = { "external_id" }, name = "external_id") })
-public class ClientTransaction extends AbstractAuditableWithUTCDateTimeCustom {
+public class ClientTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "client_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransferDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransferDetails.java
index 6690f78b4..f5c114429 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransferDetails.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/domain/ClientTransferDetails.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @SuppressWarnings("serial")
 @Entity
 @Table(name = "m_client_transfer_details")
-public class ClientTransferDetails extends AbstractPersistableCustom {
+public class ClientTransferDetails extends AbstractPersistableCustom<Long> {
 
     @Column(name = "client_id", length = 20, unique = true, nullable = false)
     private Long clientId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java
index fc020b5df..8b734bb76 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/Guarantor.java
@@ -40,7 +40,7 @@ import org.apache.fineract.portfolio.loanaccount.guarantor.GuarantorConstants.Gu
 
 @Entity
 @Table(name = "m_guarantor")
-public class Guarantor extends AbstractPersistableCustom {
+public class Guarantor extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "loan_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java
index 636181224..9b0260917 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingDetails.java
@@ -36,7 +36,7 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
 
 @Entity
 @Table(name = "m_guarantor_funding_details")
-public class GuarantorFundingDetails extends AbstractPersistableCustom {
+public class GuarantorFundingDetails extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "guarantor_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java
index 1017e04d6..d46aaf17e 100755
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/guarantor/domain/GuarantorFundingTransaction.java
@@ -31,7 +31,7 @@ import org.apache.fineract.portfolio.savings.domain.DepositAccountOnHoldTransact
 
 @Entity
 @Table(name = "m_guarantor_transaction")
-public class GuarantorFundingTransaction extends AbstractPersistableCustom {
+public class GuarantorFundingTransaction extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "guarantor_fund_detail_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java
index 2f51c61cf..967f43508 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanproduct/productmix/domain/ProductMix.java
@@ -27,7 +27,7 @@ import org.apache.fineract.portfolio.loanproduct.domain.LoanProduct;
 
 @Entity
 @Table(name = "m_product_mix")
-public class ProductMix extends AbstractPersistableCustom {
+public class ProductMix extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "product_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java
index 07d618e98..2faef56ef 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/attendance/domain/ClientAttendance.java
@@ -31,7 +31,7 @@ import org.apache.fineract.portfolio.meeting.domain.Meeting;
 @Entity
 @Table(name = "m_client_attendance", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "client_id", "meeting_id" }, name = "unique_client_meeting_attendance") })
-public class ClientAttendance extends AbstractPersistableCustom {
+public class ClientAttendance extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java
index 3a758d813..e3624f68c 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/meeting/domain/Meeting.java
@@ -51,7 +51,7 @@ import org.apache.fineract.portfolio.meeting.exception.MeetingDateException;
 @Entity
 @Table(name = "m_meeting", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "calendar_instance_id", "meeting_date" }, name = "unique_calendar_instance_id_meeting_date") })
-public class Meeting extends AbstractPersistableCustom {
+public class Meeting extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "calendar_instance_id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java
index a02b5dd51..ecc28837f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/note/domain/Note.java
@@ -38,7 +38,7 @@ import org.apache.fineract.portfolio.shareaccounts.domain.ShareAccount;
 
 @Entity
 @Table(name = "m_note")
-public class Note extends AbstractAuditableWithUTCDateTimeCustom {
+public class Note extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_id", nullable = true)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java
index 564ae9915..6f659759d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountRecurringDetail.java
@@ -43,7 +43,7 @@ import org.apache.fineract.portfolio.savings.DepositsApiConstants;
 
 @Entity
 @Table(name = "m_deposit_account_recurring_detail")
-public class DepositAccountRecurringDetail extends AbstractPersistableCustom {
+public class DepositAccountRecurringDetail extends AbstractPersistableCustom<Long> {
 
     @Column(name = "mandatory_recommended_deposit_amount", scale = 6, precision = 19, nullable = true)
     private BigDecimal mandatoryRecommendedDepositAmount;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java
index eef970f8d..5527708b2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/savings/domain/RecurringDepositScheduleInstallment.java
@@ -37,7 +37,7 @@ import org.apache.fineract.organisation.monetary.domain.Money;
 
 @Entity
 @Table(name = "m_mandatory_savings_schedule")
-public class RecurringDepositScheduleInstallment extends AbstractAuditableWithUTCDateTimeCustom {
+public class RecurringDepositScheduleInstallment extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "savings_account_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/domain/SelfBeneficiariesTPT.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/domain/SelfBeneficiariesTPT.java
index ce7a72235..637da888f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/domain/SelfBeneficiariesTPT.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/account/domain/SelfBeneficiariesTPT.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @Entity
 @Table(name = "m_selfservice_beneficiaries_tpt", uniqueConstraints = {
         @UniqueConstraint(columnNames = { "name", "app_user_id", "is_active" }, name = "name") })
-public class SelfBeneficiariesTPT extends AbstractPersistableCustom {
+public class SelfBeneficiariesTPT extends AbstractPersistableCustom<Long> {
 
     @Column(name = "app_user_id", nullable = false)
     private Long appUserId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/Pocket.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/Pocket.java
index 1694d733e..ba3b56192 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/Pocket.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/Pocket.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @SuppressWarnings("serial")
 @Entity
 @Table(name = "m_pocket", uniqueConstraints = { @UniqueConstraint(columnNames = { "app_user_id" }, name = "unique_app_user") })
-public class Pocket extends AbstractPersistableCustom {
+public class Pocket extends AbstractPersistableCustom<Long> {
 
     @Column(name = "app_user_id", length = 20, nullable = false)
     private Long appUserId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/PocketAccountMapping.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/PocketAccountMapping.java
index 90976d45a..9fa080dca 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/PocketAccountMapping.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/pockets/domain/PocketAccountMapping.java
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 @SuppressWarnings("serial")
 @Entity
 @Table(name = "m_pocket_accounts_mapping")
-public class PocketAccountMapping extends AbstractPersistableCustom {
+public class PocketAccountMapping extends AbstractPersistableCustom<Long> {
 
     @Column(name = "pocket_id", length = 20, nullable = false)
     private Long pocketId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/domain/SelfServiceRegistration.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/domain/SelfServiceRegistration.java
index 84155f947..1be371b00 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/domain/SelfServiceRegistration.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/registration/domain/SelfServiceRegistration.java
@@ -30,7 +30,7 @@ import org.apache.fineract.portfolio.client.domain.Client;
 
 @Entity
 @Table(name = "request_audit_table")
-public class SelfServiceRegistration extends AbstractPersistableCustom {
+public class SelfServiceRegistration extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_id", nullable = false)
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 8662e9d6d..ee231b701 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
@@ -47,7 +47,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "m_share_account")
-public class ShareAccount extends AbstractPersistableCustom {
+public class ShareAccount extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "client_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java
index 309522177..79953b34d 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountCharge.java
@@ -35,7 +35,7 @@ import org.apache.fineract.portfolio.charge.domain.ChargeTimeType;
 
 @Entity
 @Table(name = "m_share_account_charge")
-public class ShareAccountCharge extends AbstractPersistableCustom {
+public class ShareAccountCharge extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "account_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountChargePaidBy.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountChargePaidBy.java
index 72dd432a4..0911cd060 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountChargePaidBy.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountChargePaidBy.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_share_account_charge_paid_by")
-public class ShareAccountChargePaidBy extends AbstractPersistableCustom {
+public class ShareAccountChargePaidBy extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "share_transaction_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountDividendDetails.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountDividendDetails.java
index 96d4b9102..aba53679f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountDividendDetails.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareaccounts/domain/ShareAccountDividendDetails.java
@@ -29,7 +29,7 @@ import org.apache.fineract.portfolio.shareproducts.domain.ShareProductDividendPa
 
 @Entity
 @Table(name = "m_share_account_dividend_details")
-public class ShareAccountDividendDetails extends AbstractPersistableCustom {
+public class ShareAccountDividendDetails extends AbstractPersistableCustom<Long> {
 
     @Column(name = "account_id", nullable = false)
     private Long shareAccountId;
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 f54511ca3..af21e9cab 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
@@ -34,7 +34,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_share_account_transactions")
-public class ShareAccountTransaction extends AbstractPersistableCustom {
+public class ShareAccountTransaction extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "account_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductMarketPrice.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductMarketPrice.java
index 51ce43dd9..dd6dd9000 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductMarketPrice.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/shareproducts/domain/ShareProductMarketPrice.java
@@ -29,7 +29,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_share_product_market_price")
-public class ShareProductMarketPrice extends AbstractPersistableCustom {
+public class ShareProductMarketPrice extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "product_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java
index 0496cb66d..433b0e68f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Component.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_survey_components")
-public class Component extends AbstractPersistableCustom {
+public class Component extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "survey_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/LookupTable.java b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/LookupTable.java
index b1c28ac0d..089794326 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/LookupTable.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/LookupTable.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_survey_lookup_tables")
-public class LookupTable extends AbstractPersistableCustom {
+public class LookupTable extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "survey_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Question.java b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Question.java
index 7f6ae1dbe..df199bb19 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Question.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Question.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_survey_questions")
-public class Question extends AbstractPersistableCustom {
+public class Question extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "survey_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Response.java b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Response.java
index 97d259d4f..16416c914 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Response.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Response.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_survey_responses")
-public class Response extends AbstractPersistableCustom {
+public class Response extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "question_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Scorecard.java b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Scorecard.java
index 87bc4f8da..77c8e3d7f 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Scorecard.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Scorecard.java
@@ -32,7 +32,7 @@ import org.apache.fineract.useradministration.domain.AppUser;
 
 @Entity
 @Table(name = "m_survey_scorecards")
-public class Scorecard extends AbstractPersistableCustom {
+public class Scorecard extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(fetch = FetchType.LAZY)
     @JoinColumn(name = "survey_id")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Survey.java b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Survey.java
index d1c01e773..a49cc25d2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Survey.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/spm/domain/Survey.java
@@ -32,7 +32,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_surveys")
-public class Survey extends AbstractPersistableCustom {
+public class Survey extends AbstractPersistableCustom<Long> {
 
     @OneToMany(mappedBy = "survey", fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
     @OrderBy("sequenceNo")
diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java b/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java
index 82113ae33..9ddd970a2 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/template/domain/Template.java
@@ -41,7 +41,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_template", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
-public class Template extends AbstractPersistableCustom {
+public class Template extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false, unique = true)
     private String name;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateMapper.java b/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateMapper.java
index 1d0ddab02..ef1fb7870 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateMapper.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/template/domain/TemplateMapper.java
@@ -25,7 +25,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_templatemappers")
-public class TemplateMapper extends AbstractPersistableCustom {
+public class TemplateMapper extends AbstractPersistableCustom<Long> {
 
     @Column(name = "mapperorder")
     private int mapperorder;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUserPreviousPassword.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUserPreviousPassword.java
index b15142128..f059921f9 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUserPreviousPassword.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/AppUserPreviousPassword.java
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.core.service.DateUtils;
 
 @Entity
 @Table(name = "m_appuser_previous_password")
-public class AppUserPreviousPassword extends AbstractPersistableCustom {
+public class AppUserPreviousPassword extends AbstractPersistableCustom<Long> {
 
     @Column(name = "user_id", nullable = false)
     private Long userId;
diff --git a/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/PasswordValidationPolicy.java b/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/PasswordValidationPolicy.java
index b31b2782b..507bb27f6 100644
--- a/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/PasswordValidationPolicy.java
+++ b/fineract-provider/src/main/java/org/apache/fineract/useradministration/domain/PasswordValidationPolicy.java
@@ -27,7 +27,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_password_validation_policy")
-public class PasswordValidationPolicy extends AbstractPersistableCustom {
+public class PasswordValidationPolicy extends AbstractPersistableCustom<Long> {
 
     @Column(name = "regex", nullable = false)
     private String regex;
diff --git a/fineract-provider/src/test/java/org/apache/fineract/commands/service/SynchronousCommandProcessingServiceTest.java b/fineract-provider/src/test/java/org/apache/fineract/commands/service/SynchronousCommandProcessingServiceTest.java
index 361d0361e..ed4f42366 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/commands/service/SynchronousCommandProcessingServiceTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/commands/service/SynchronousCommandProcessingServiceTest.java
@@ -142,6 +142,7 @@ public class SynchronousCommandProcessingServiceTest {
         NewCommandSourceHandler commandHandler = Mockito.mock(NewCommandSourceHandler.class);
         CommandProcessingResult commandProcessingResult = Mockito.mock(CommandProcessingResult.class);
         CommandSource commandSource = Mockito.mock(CommandSource.class);
+        when(commandSource.getId()).thenReturn(1L);
         when(commandProcessingResult.isRollbackTransaction()).thenReturn(false);
         RuntimeException runtimeException = new RuntimeException("foo");
         when(commandHandler.processCommand(jsonCommand)).thenThrow(runtimeException);
@@ -154,6 +155,7 @@ public class SynchronousCommandProcessingServiceTest {
         when(commandSourceService.getCommandSource(commandId)).thenReturn(commandSource);
 
         AppUser appUser = Mockito.mock(AppUser.class);
+        when(appUser.getId()).thenReturn(1L);
         when(context.authenticatedUser(Mockito.any(CommandWrapper.class))).thenReturn(appUser);
         when(commandSourceService.saveInitialNewTransaction(commandWrapper, jsonCommand, appUser, idk)).thenReturn(commandSource);
 
diff --git a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/auditing/CustomAuditingHandlerTest.java b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/auditing/CustomAuditingHandlerTest.java
index 52844609d..a53cab463 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/auditing/CustomAuditingHandlerTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/infrastructure/core/auditing/CustomAuditingHandlerTest.java
@@ -58,7 +58,7 @@ public class CustomAuditingHandlerTest {
     public void markCreated() {
         MappingContext mappingContext = Mockito.mock(MappingContext.class);
         CustomAuditingHandler testInstance = new CustomAuditingHandler(PersistentEntities.of(mappingContext));
-        AbstractAuditableWithUTCDateTimeCustom targetObject = Mockito.spy(AbstractAuditableWithUTCDateTimeCustom.class);
+        AbstractAuditableWithUTCDateTimeCustom<Long> targetObject = Mockito.spy(AbstractAuditableWithUTCDateTimeCustom.class);
         targetObject = testInstance.markCreated(targetObject);
         OffsetDateTime now = DateUtils.getAuditOffsetDateTime();
 
@@ -74,7 +74,7 @@ public class CustomAuditingHandlerTest {
     public void markModified() {
         MappingContext mappingContext = Mockito.mock(MappingContext.class);
         CustomAuditingHandler testInstance = new CustomAuditingHandler(PersistentEntities.of(mappingContext));
-        AbstractAuditableWithUTCDateTimeCustom targetObject = Mockito.spy(AbstractAuditableWithUTCDateTimeCustom.class);
+        AbstractAuditableWithUTCDateTimeCustom<Long> targetObject = Mockito.spy(AbstractAuditableWithUTCDateTimeCustom.class);
         targetObject = testInstance.markModified(targetObject);
         OffsetDateTime now = DateUtils.getAuditOffsetDateTime();
 
diff --git a/fineract-provider/src/test/java/org/apache/fineract/portfolio/deliquency/DelinquencyWritePlatformServiceRangeChangeEventTest.java b/fineract-provider/src/test/java/org/apache/fineract/portfolio/deliquency/DelinquencyWritePlatformServiceRangeChangeEventTest.java
index 83fc04103..0a9945675 100644
--- a/fineract-provider/src/test/java/org/apache/fineract/portfolio/deliquency/DelinquencyWritePlatformServiceRangeChangeEventTest.java
+++ b/fineract-provider/src/test/java/org/apache/fineract/portfolio/deliquency/DelinquencyWritePlatformServiceRangeChangeEventTest.java
@@ -572,6 +572,7 @@ public class DelinquencyWritePlatformServiceRangeChangeEventTest {
                 .forClass(LoanDelinquencyRangeChangeBusinessEvent.class);
         // given
         Loan loanForProcessing = Mockito.mock(Loan.class);
+        when(loanForProcessing.getId()).thenReturn(1L);
         DelinquencyRange range1 = DelinquencyRange.instance("Range1", 1, 2);
         range1.setId(1L);
         DelinquencyRange range2 = DelinquencyRange.instance("Range30", 3, 30);
@@ -603,7 +604,7 @@ public class DelinquencyWritePlatformServiceRangeChangeEventTest {
                 .forClass(LoanAccountDelinquencyPauseChangedBusinessEvent.class);
         // given
         Loan loanForProcessing = Mockito.mock(Loan.class);
-        loanForProcessing.setId(1L);
+        when(loanForProcessing.getId()).thenReturn(1L);
 
         JsonCommand command = Mockito.mock(JsonCommand.class);
 
@@ -654,7 +655,7 @@ public class DelinquencyWritePlatformServiceRangeChangeEventTest {
                 .forClass(LoanDelinquencyRangeChangeBusinessEvent.class);
         // given
         Loan loanForProcessing = Mockito.mock(Loan.class);
-        loanForProcessing.setId(1L);
+        when(loanForProcessing.getId()).thenReturn(1L);
 
         JsonCommand command = Mockito.mock(JsonCommand.class);
 
diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java
index 3091f4513..630dddc21 100644
--- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java
+++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRate.java
@@ -46,7 +46,7 @@ import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData;
 
 @Entity
 @Table(name = "m_floating_rates", uniqueConstraints = { @UniqueConstraint(columnNames = { "name" }, name = "unq_name") })
-public class FloatingRate extends AbstractAuditableWithUTCDateTimeCustom {
+public class FloatingRate extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @Column(name = "name", length = 200, unique = true, nullable = false)
     private String name;
diff --git a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java
index 2ba816dfe..c6b560514 100644
--- a/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java
+++ b/fineract-rates/src/main/java/org/apache/fineract/portfolio/floatingrates/domain/FloatingRatePeriod.java
@@ -31,7 +31,7 @@ import org.apache.fineract.portfolio.floatingrates.data.FloatingRatePeriodData;
 
 @Entity
 @Table(name = "m_floating_rates_periods")
-public class FloatingRatePeriod extends AbstractAuditableWithUTCDateTimeCustom {
+public class FloatingRatePeriod extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "floating_rates_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/interoperation/domain/InteropIdentifier.java b/fineract-savings/src/main/java/org/apache/fineract/interoperation/domain/InteropIdentifier.java
index 170b41a77..46950b344 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/interoperation/domain/InteropIdentifier.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/interoperation/domain/InteropIdentifier.java
@@ -43,7 +43,7 @@ import org.apache.fineract.portfolio.savings.domain.SavingsAccount;
 @Table(name = "interop_identifier", uniqueConstraints = {
         @UniqueConstraint(name = "uk_hathor_identifier_account", columnNames = { "account_id", "type" }),
         @UniqueConstraint(name = "uk_hathor_identifier_value", columnNames = { "type", "a_value", "sub_value_or_type" }) })
-public class InteropIdentifier extends AbstractPersistableCustom {
+public class InteropIdentifier extends AbstractPersistableCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "account_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestIncentives.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestIncentives.java
index de3ae88f1..3822b8f60 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestIncentives.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestIncentives.java
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_interest_incentives")
-public class InterestIncentives extends AbstractPersistableCustom {
+public class InterestIncentives extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "interest_rate_slab_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java
index 974aea510..a49230b91 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChart.java
@@ -58,7 +58,7 @@ import org.apache.fineract.portfolio.savings.SavingsPeriodFrequencyType;
 
 @Entity
 @Table(name = "m_interest_rate_chart")
-public class InterestRateChart extends AbstractPersistableCustom {
+public class InterestRateChart extends AbstractPersistableCustom<Long> {
 
     @Embedded
     private InterestRateChartFields chartFields;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlab.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlab.java
index 5673384d8..74e963845 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlab.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/interestratechart/domain/InterestRateChartSlab.java
@@ -56,7 +56,7 @@ import org.apache.fineract.portfolio.interestratechart.InterestRateChartSlabApiC
 
 @Entity
 @Table(name = "m_interest_rate_slab")
-public class InterestRateChartSlab extends AbstractPersistableCustom {
+public class InterestRateChartSlab extends AbstractPersistableCustom<Long> {
 
     @Embedded
     private InterestRateChartSlabFields slabFields;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java
index 5c9eb2b69..a71763352 100755
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentive.java
@@ -28,7 +28,7 @@ import org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives
 
 @Entity
 @Table(name = "m_deposit_account_interest_incentives")
-public class DepositAccountInterestIncentive extends AbstractPersistableCustom {
+public class DepositAccountInterestIncentive extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "deposit_account_interest_rate_slab_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java
index 1a5793b07..c45f1ad1a 100755
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestIncentives.java
@@ -28,7 +28,7 @@ import org.apache.fineract.portfolio.interestratechart.domain.InterestIncentives
 
 @Entity
 @Table(name = "m_savings_interest_incentives")
-public class DepositAccountInterestIncentives extends AbstractPersistableCustom {
+public class DepositAccountInterestIncentives extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "deposit_account_interest_rate_slab_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java
index 36a2358aa..4e2e1389f 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChart.java
@@ -41,7 +41,7 @@ import org.apache.fineract.portfolio.interestratechart.incentive.IncentiveDTO;
 
 @Entity
 @Table(name = "m_savings_account_interest_rate_chart")
-public class DepositAccountInterestRateChart extends AbstractPersistableCustom {
+public class DepositAccountInterestRateChart extends AbstractPersistableCustom<Long> {
 
     @Embedded
     private InterestRateChartFields chartFields;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java
index d8ab649f1..119185a99 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountInterestRateChartSlabs.java
@@ -35,7 +35,7 @@ import org.apache.fineract.portfolio.interestratechart.domain.InterestRateChartS
 
 @Entity
 @Table(name = "m_savings_account_interest_rate_slab")
-public class DepositAccountInterestRateChartSlabs extends AbstractPersistableCustom {
+public class DepositAccountInterestRateChartSlabs extends AbstractPersistableCustom<Long> {
 
     @Embedded
     private InterestRateChartSlabFields slabFields;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java
index cb132e419..fa57491e3 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountOnHoldTransaction.java
@@ -37,7 +37,7 @@ import org.apache.fineract.portfolio.savings.DepositAccountOnHoldTransactionType
 
 @Entity
 @Table(name = "m_deposit_account_on_hold_transaction")
-public class DepositAccountOnHoldTransaction extends AbstractAuditableWithUTCDateTimeCustom {
+public class DepositAccountOnHoldTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "savings_account_id", nullable = true)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java
index 64553b3b4..31240765d 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositAccountTermAndPreClosure.java
@@ -49,7 +49,7 @@ import org.apache.fineract.portfolio.savings.service.SavingsEnumerations;
 
 @Entity
 @Table(name = "m_deposit_account_term_and_preclosure")
-public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom {
+public class DepositAccountTermAndPreClosure extends AbstractPersistableCustom<Long> {
 
     @Column(name = "deposit_amount", scale = 6, precision = 19, nullable = true)
     private BigDecimal depositAmount;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java
index 0d12977c5..8d2d5c64b 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductRecurringDetail.java
@@ -30,7 +30,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_deposit_product_recurring_detail")
-public class DepositProductRecurringDetail extends AbstractPersistableCustom {
+public class DepositProductRecurringDetail extends AbstractPersistableCustom<Long> {
 
     @Embedded
     private DepositRecurringDetail recurringDetail;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java
index cf9c8cab2..ab5cd8522 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/DepositProductTermAndPreClosure.java
@@ -31,7 +31,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_deposit_product_term_and_preclosure")
-public class DepositProductTermAndPreClosure extends AbstractPersistableCustom {
+public class DepositProductTermAndPreClosure extends AbstractPersistableCustom<Long> {
 
     @Embedded
     private DepositPreClosureDetail preClosureDetail;
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/GroupSavingsIndividualMonitoring.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/GroupSavingsIndividualMonitoring.java
index 611359051..d54060338 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/GroupSavingsIndividualMonitoring.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/GroupSavingsIndividualMonitoring.java
@@ -33,7 +33,7 @@ import org.apache.fineract.portfolio.group.domain.Group;
 
 @Entity
 @Table(name = "gsim_accounts", uniqueConstraints = { @UniqueConstraint(columnNames = { "account_number" }, name = "gsim_id") })
-public final class GroupSavingsIndividualMonitoring extends AbstractPersistableCustom {
+public final class GroupSavingsIndividualMonitoring extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "group_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java
index 61a067910..bfd94a1ea 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccount.java
@@ -134,7 +134,7 @@ import org.springframework.util.CollectionUtils;
 @DiscriminatorColumn(name = "deposit_type_enum", discriminatorType = DiscriminatorType.INTEGER)
 @DiscriminatorValue("100")
 @SuppressWarnings({ "MemberName" })
-public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
+public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     private static final Logger LOG = LoggerFactory.getLogger(SavingsAccount.class);
 
@@ -1645,13 +1645,11 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
             actualChanges.put(SavingsApiConstants.dateFormatParamName, dateFormat);
             this.submittedOnDate = command.localDateValueOfParameterNamed(SavingsApiConstants.submittedOnDateParamName);
         }
-
         if (command.isChangeInStringParameterNamed(SavingsApiConstants.accountNoParamName, this.accountNumber)) {
             final String newValue = command.stringValueOfParameterNamed(SavingsApiConstants.accountNoParamName);
             actualChanges.put(SavingsApiConstants.accountNoParamName, newValue);
             this.accountNumber = StringUtils.defaultIfEmpty(newValue, null);
         }
-
         if (command.isChangeInStringParameterNamed(SavingsApiConstants.externalIdParamName, this.externalId.getValue())) {
             final String newValue = command.stringValueOfParameterNamed(SavingsApiConstants.externalIdParamName);
             actualChanges.put(SavingsApiConstants.externalIdParamName, newValue);
@@ -1660,35 +1658,28 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
                 this.externalId = ExternalId.generate();
             }
         }
-
         if (command.isChangeInLongParameterNamed(SavingsApiConstants.clientIdParamName, clientId())) {
             final Long newValue = command.longValueOfParameterNamed(SavingsApiConstants.clientIdParamName);
             actualChanges.put(SavingsApiConstants.clientIdParamName, newValue);
         }
-
         if (command.isChangeInLongParameterNamed(SavingsApiConstants.groupIdParamName, groupId())) {
             final Long newValue = command.longValueOfParameterNamed(SavingsApiConstants.groupIdParamName);
             actualChanges.put(SavingsApiConstants.groupIdParamName, newValue);
         }
-
         if (command.isChangeInLongParameterNamed(SavingsApiConstants.productIdParamName, this.product.getId())) {
             final Long newValue = command.longValueOfParameterNamed(SavingsApiConstants.productIdParamName);
             actualChanges.put(SavingsApiConstants.productIdParamName, newValue);
         }
-
         if (command.isChangeInLongParameterNamed(SavingsApiConstants.fieldOfficerIdParamName, hasSavingsOfficerId())) {
             final Long newValue = command.longValueOfParameterNamed(SavingsApiConstants.fieldOfficerIdParamName);
             actualChanges.put(SavingsApiConstants.fieldOfficerIdParamName, newValue);
         }
-
         if (command.isChangeInBigDecimalParameterNamed(SavingsApiConstants.nominalAnnualInterestRateParamName,
                 this.nominalAnnualInterestRate)) {
             final BigDecimal newValue = command.bigDecimalValueOfParameterNamed(SavingsApiConstants.nominalAnnualInterestRateParamName);
             actualChanges.put(SavingsApiConstants.nominalAnnualInterestRateParamName, newValue);
-            actualChanges.put("locale", localeAsInput);
             this.nominalAnnualInterestRate = newValue;
         }
-
         if (command.isChangeInIntegerParameterNamed(SavingsApiConstants.interestCompoundingPeriodTypeParamName,
                 this.interestCompoundingPeriodType)) {
             final Integer newValue = command.integerValueOfParameterNamed(SavingsApiConstants.interestCompoundingPeriodTypeParamName);
@@ -1696,20 +1687,17 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
                     : newValue;
             actualChanges.put(SavingsApiConstants.interestCompoundingPeriodTypeParamName, this.interestCompoundingPeriodType);
         }
-
         if (command.isChangeInIntegerParameterNamed(SavingsApiConstants.interestPostingPeriodTypeParamName,
                 this.interestPostingPeriodType)) {
             final Integer newValue = command.integerValueOfParameterNamed(SavingsApiConstants.interestPostingPeriodTypeParamName);
             this.interestPostingPeriodType = newValue != null ? SavingsPostingInterestPeriodType.fromInt(newValue).getValue() : newValue;
             actualChanges.put(SavingsApiConstants.interestPostingPeriodTypeParamName, this.interestPostingPeriodType);
         }
-
         if (command.isChangeInIntegerParameterNamed(SavingsApiConstants.interestCalculationTypeParamName, this.interestCalculationType)) {
             final Integer newValue = command.integerValueOfParameterNamed(SavingsApiConstants.interestCalculationTypeParamName);
             this.interestCalculationType = newValue != null ? SavingsInterestCalculationType.fromInt(newValue).getValue() : newValue;
             actualChanges.put(SavingsApiConstants.interestCalculationTypeParamName, this.interestCalculationType);
         }
-
         if (command.isChangeInIntegerParameterNamed(SavingsApiConstants.interestCalculationDaysInYearTypeParamName,
                 this.interestCalculationDaysInYearType)) {
             final Integer newValue = command.integerValueOfParameterNamed(SavingsApiConstants.interestCalculationDaysInYearTypeParamName);
@@ -1718,7 +1706,6 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
                     : newValue;
             actualChanges.put(SavingsApiConstants.interestCalculationDaysInYearTypeParamName, this.interestCalculationDaysInYearType);
         }
-
         if (command.isChangeInBigDecimalParameterNamedDefaultingZeroToNull(SavingsApiConstants.minRequiredOpeningBalanceParamName,
                 this.minRequiredOpeningBalance)) {
             final BigDecimal newValue = command
@@ -1727,7 +1714,6 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
             actualChanges.put("locale", localeAsInput);
             this.minRequiredOpeningBalance = Money.of(this.currency, newValue).getAmount();
         }
-
         if (command.isChangeInIntegerParameterNamedDefaultingZeroToNull(SavingsApiConstants.lockinPeriodFrequencyParamName,
                 this.lockinPeriodFrequency)) {
             final Integer newValue = command
@@ -1806,7 +1792,6 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
             actualChanges.put(enforceMinRequiredBalanceParamName, newValue);
             this.enforceMinRequiredBalance = newValue;
         }
-
         if (command.isChangeInBigDecimalParameterNamedDefaultingZeroToNull(minRequiredBalanceParamName, this.minRequiredBalance)) {
             final BigDecimal newValue = command.bigDecimalValueOfParameterNamedDefaultToNullIfZero(minRequiredBalanceParamName);
             actualChanges.put(minRequiredBalanceParamName, newValue);
@@ -1818,14 +1803,12 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
             actualChanges.put(lienAllowedParamName, newValue);
             this.lienAllowed = newValue;
         }
-
         if (command.isChangeInBigDecimalParameterNamedDefaultingZeroToNull(maxAllowedLienLimitParamName, this.maxAllowedLienLimit)) {
             final BigDecimal newValue = command.bigDecimalValueOfParameterNamedDefaultToNullIfZero(maxAllowedLienLimitParamName);
             actualChanges.put(maxAllowedLienLimitParamName, newValue);
             actualChanges.put(localeParamName, localeAsInput);
             this.maxAllowedLienLimit = newValue;
         }
-
         if (command.isChangeInBooleanParameterNamed(withHoldTaxParamName, this.withHoldTax)) {
             final boolean newValue = command.booleanPrimitiveValueOfParameterNamed(withHoldTaxParamName);
             actualChanges.put(withHoldTaxParamName, newValue);
@@ -2260,7 +2243,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.approvalAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.SUBMITTED_AND_PENDING_APPROVAL.hasStateOf(currentStatus)) {
             baseDataValidator.reset().parameter(SavingsApiConstants.approvedOnDateParamName)
                     .failWithCodeNoParameterAddedToErrorCode("not.in.submittedandpendingapproval.state");
@@ -2327,7 +2310,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.undoApprovalAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.APPROVED.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.approvedOnDateParamName)
@@ -2490,7 +2473,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.rejectAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.SUBMITTED_AND_PENDING_APPROVAL.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.rejectedOnDateParamName)
@@ -2551,7 +2534,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.withdrawnByApplicantAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.SUBMITTED_AND_PENDING_APPROVAL.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.withdrawnOnDateParamName)
@@ -2612,7 +2595,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.activateAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.APPROVED.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.activatedOnDateParamName)
@@ -2759,7 +2742,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(SAVINGS_ACCOUNT_RESOURCE_NAME + SavingsApiConstants.closeAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
             baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode("not.in.active.state");
             if (!dataValidationErrors.isEmpty()) {
@@ -2870,7 +2853,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
     }
 
     public void activateAccountBasedOnBalance() {
-        if (SavingsAccountStatusType.fromInt(this.status).isClosed() && !this.summary.getAccountBalance(getCurrency()).isZero()) {
+        if (getStatus().isClosed() && !this.summary.getAccountBalance(getCurrency()).isZero()) {
             this.status = SavingsAccountStatusType.ACTIVE.getValue();
         }
     }
@@ -3527,7 +3510,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.blockAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.statusParamName)
@@ -3552,7 +3535,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.unblockAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.statusParamName)
@@ -3581,7 +3564,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.blockCreditsAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.statusParamName)
@@ -3613,7 +3596,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.unblockCreditsAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
             baseDataValidator.reset().failWithCodeNoParameterAddedToErrorCode(SavingsApiConstants.ERROR_MSG_SAVINGS_ACCOUNT_NOT_ACTIVE);
         }
@@ -3644,7 +3627,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.blockDebitsAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
             baseDataValidator.reset().parameter(SavingsApiConstants.statusParamName)
                     .failWithCodeNoParameterAddedToErrorCode(SavingsApiConstants.ERROR_MSG_SAVINGS_ACCOUNT_NOT_ACTIVE);
@@ -3676,7 +3659,7 @@ public class SavingsAccount extends AbstractAuditableWithUTCDateTimeCustom {
         final DataValidatorBuilder baseDataValidator = new DataValidatorBuilder(dataValidationErrors)
                 .resource(depositAccountType().resourceName() + SavingsApiConstants.unblockDebitsAction);
 
-        final SavingsAccountStatusType currentStatus = SavingsAccountStatusType.fromInt(this.status);
+        final SavingsAccountStatusType currentStatus = getStatus();
         if (!SavingsAccountStatusType.ACTIVE.hasStateOf(currentStatus)) {
 
             baseDataValidator.reset().parameter(SavingsApiConstants.statusParamName)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java
index 8c525b208..93127dfed 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountCharge.java
@@ -60,7 +60,7 @@ import org.slf4j.LoggerFactory;
  */
 @Entity
 @Table(name = "m_savings_account_charge")
-public class SavingsAccountCharge extends AbstractAuditableWithUTCDateTimeCustom {
+public class SavingsAccountCharge extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     private static final Logger LOG = LoggerFactory.getLogger(SavingsAccountCharge.class);
 
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargePaidBy.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargePaidBy.java
index 123b5641c..39b437dc6 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargePaidBy.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountChargePaidBy.java
@@ -28,7 +28,7 @@ import org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
 
 @Entity
 @Table(name = "m_savings_account_charge_paid_by")
-public class SavingsAccountChargePaidBy extends AbstractPersistableCustom {
+public class SavingsAccountChargePaidBy extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "savings_account_transaction_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java
index 2cd1c7dde..96aef5428 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransaction.java
@@ -60,7 +60,7 @@ import org.springframework.util.CollectionUtils;
  */
 @Entity
 @Table(name = "m_savings_account_transaction")
-public final class SavingsAccountTransaction extends AbstractAuditableWithUTCDateTimeCustom {
+public final class SavingsAccountTransaction extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne(optional = false)
     @JoinColumn(name = "savings_account_id", referencedColumnName = "id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransactionTaxDetails.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransactionTaxDetails.java
index af274b146..0458ed6bf 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransactionTaxDetails.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsAccountTransactionTaxDetails.java
@@ -30,7 +30,7 @@ import org.apache.fineract.portfolio.tax.domain.TaxComponent;
 
 @Entity
 @Table(name = "m_savings_account_transaction_tax_details")
-public class SavingsAccountTransactionTaxDetails extends AbstractPersistableCustom {
+public class SavingsAccountTransactionTaxDetails extends AbstractPersistableCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "savings_transaction_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java
index 6060339d9..3fde52434 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsOfficerAssignmentHistory.java
@@ -35,7 +35,7 @@ import org.apache.fineract.organisation.staff.domain.Staff;
 
 @Entity
 @Table(name = "m_savings_officer_assignment_history")
-public class SavingsOfficerAssignmentHistory extends AbstractAuditableWithUTCDateTimeCustom {
+public class SavingsOfficerAssignmentHistory extends AbstractAuditableWithUTCDateTimeCustom<Long> {
 
     @ManyToOne
     @JoinColumn(name = "account_id", nullable = false)
diff --git a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java
index f47f62149..917b37702 100644
--- a/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java
+++ b/fineract-savings/src/main/java/org/apache/fineract/portfolio/savings/domain/SavingsProduct.java
@@ -98,7 +98,7 @@ import org.apache.fineract.portfolio.tax.domain.TaxGroup;
 @Inheritance
 @DiscriminatorColumn(name = "deposit_type_enum", discriminatorType = DiscriminatorType.INTEGER)
 @DiscriminatorValue("100")
-public class SavingsProduct extends AbstractPersistableCustom {
+public class SavingsProduct extends AbstractPersistableCustom<Long> {
 
     @Column(name = "name", nullable = false, unique = true)
     protected String name;