This is an automated email from the ASF dual-hosted git repository.
arnold 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 ad4fa563d Auditor fix - Detached Auditor entity was not persisted
during cascade persisting
ad4fa563d is described below
commit ad4fa563dec4a59a69b2dacd0d4ab65bc9a7f898
Author: Adam Saghy <[email protected]>
AuthorDate: Thu Jul 7 00:23:56 2022 +0200
Auditor fix - Detached Auditor entity was not persisted during cascade
persisting
---
.../infrastructure/core/config/JPAConfig.java | 3 +--
.../core/domain/AbstractAuditableCustom.java | 24 ++++++++--------------
.../core/domain/AuditorAwareImpl.java | 18 ++++++++--------
.../provisioning/domain/ProvisioningCriteria.java | 4 ++--
.../domain/LoanRepaymentScheduleHistory.java | 15 ++++++--------
...oanScheduleHistoryWritePlatformServiceImpl.java | 5 ++---
6 files changed, 29 insertions(+), 40 deletions(-)
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/JPAConfig.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/JPAConfig.java
index 841dea99d..b9d2afefb 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/JPAConfig.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/JPAConfig.java
@@ -25,7 +25,6 @@ import
org.apache.fineract.infrastructure.core.persistence.DatabaseSelectingPers
import
org.apache.fineract.infrastructure.core.persistence.ExtendedJpaTransactionManager;
import org.apache.fineract.infrastructure.core.service.RoutingDataSource;
import
org.apache.fineract.infrastructure.core.service.database.DatabaseTypeResolver;
-import org.apache.fineract.useradministration.domain.AppUser;
import org.eclipse.persistence.config.PersistenceUnitProperties;
import org.springframework.beans.factory.ObjectProvider;
import
org.springframework.boot.autoconfigure.orm.jpa.EntityManagerFactoryBuilderCustomizer;
@@ -96,7 +95,7 @@ public class JPAConfig extends JpaBaseConfiguration {
}
@Bean
- public AuditorAware<AppUser> auditorAware() {
+ public AuditorAware<Long> auditorAware() {
return new AuditorAwareImpl();
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
index 4bb109765..b8e7f8d61 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AbstractAuditableCustom.java
@@ -22,13 +22,9 @@ import java.time.Instant;
import java.util.Date;
import java.util.Optional;
import javax.persistence.Column;
-import javax.persistence.FetchType;
-import javax.persistence.JoinColumn;
-import javax.persistence.ManyToOne;
import javax.persistence.MappedSuperclass;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
-import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.data.domain.Auditable;
import org.springframework.data.jpa.domain.AbstractAuditable;
@@ -44,33 +40,31 @@ import
org.springframework.data.jpa.domain.AbstractAuditable;
* the type of the auditing type's identifier
*/
@MappedSuperclass
-public abstract class AbstractAuditableCustom extends
AbstractPersistableCustom implements Auditable<AppUser, Long, Instant> {
+public abstract class AbstractAuditableCustom extends
AbstractPersistableCustom implements Auditable<Long, Long, Instant> {
private static final long serialVersionUID = 141481953116476081L;
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "createdby_id")
- private AppUser createdBy;
+ @Column(name = "createdby_id")
+ private Long createdBy;
@Column(name = "created_date")
@Temporal(TemporalType.TIMESTAMP)
private Date createdDate;
- @ManyToOne(fetch = FetchType.LAZY)
- @JoinColumn(name = "lastmodifiedby_id")
- private AppUser lastModifiedBy;
+ @Column(name = "lastmodifiedby_id")
+ private Long lastModifiedBy;
@Column(name = "lastmodified_date")
@Temporal(TemporalType.TIMESTAMP)
private Date lastModifiedDate;
@Override
- public Optional<AppUser> getCreatedBy() {
+ public Optional<Long> getCreatedBy() {
return Optional.ofNullable(this.createdBy);
}
@Override
- public void setCreatedBy(final AppUser createdBy) {
+ public void setCreatedBy(final Long createdBy) {
this.createdBy = createdBy;
}
@@ -85,12 +79,12 @@ public abstract class AbstractAuditableCustom extends
AbstractPersistableCustom
}
@Override
- public Optional<AppUser> getLastModifiedBy() {
+ public Optional<Long> getLastModifiedBy() {
return Optional.ofNullable(this.lastModifiedBy);
}
@Override
- public void setLastModifiedBy(final AppUser lastModifiedBy) {
+ public void setLastModifiedBy(final Long lastModifiedBy) {
this.lastModifiedBy = lastModifiedBy;
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditorAwareImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditorAwareImpl.java
index e95aef17d..46ef34de1 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditorAwareImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/domain/AuditorAwareImpl.java
@@ -27,29 +27,29 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContext;
import org.springframework.security.core.context.SecurityContextHolder;
-public class AuditorAwareImpl implements AuditorAware<AppUser> {
+public class AuditorAwareImpl implements AuditorAware<Long> {
@Autowired
private AppUserRepository userRepository;
@Override
- public Optional<AppUser> getCurrentAuditor() {
- Optional<AppUser> currentUser;
+ public Optional<Long> getCurrentAuditor() {
+ Optional<Long> currentUserId;
final SecurityContext securityContext =
SecurityContextHolder.getContext();
if (securityContext != null) {
final Authentication authentication =
securityContext.getAuthentication();
if (authentication != null) {
- currentUser = Optional.ofNullable((AppUser)
authentication.getPrincipal());
+ currentUserId = Optional.ofNullable(((AppUser)
authentication.getPrincipal()).getId());
} else {
- currentUser = retrieveSuperUser();
+ currentUserId = retrieveSuperUser();
}
} else {
- currentUser = retrieveSuperUser();
+ currentUserId = retrieveSuperUser();
}
- return currentUser;
+ return currentUserId;
}
- private Optional<AppUser> retrieveSuperUser() {
- return this.userRepository.findById(Long.valueOf("1"));
+ private Optional<Long> retrieveSuperUser() {
+ return Optional.of(1L);
}
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java
b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java
index 9a3ee2689..21db079b3 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/organisation/provisioning/domain/ProvisioningCriteria.java
@@ -69,9 +69,9 @@ public class ProvisioningCriteria extends
AbstractAuditableCustom {
public ProvisioningCriteria(String criteriaName, AppUser createdBy,
ZonedDateTime createdDate, AppUser lastModifiedBy,
ZonedDateTime lastModifiedDate) {
this.criteriaName = criteriaName;
- setCreatedBy(createdBy);
+ setCreatedBy(createdBy.getId());
setCreatedDate(Instant.ofEpochMilli(createdDate.toInstant().toEpochMilli()));
- setLastModifiedBy(lastModifiedBy);
+ setLastModifiedBy(lastModifiedBy.getId());
setLastModifiedDate(Instant.ofEpochMilli(lastModifiedDate.toInstant().toEpochMilli()));
}
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
index 4e2db4a17..34fc4befe 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/domain/LoanRepaymentScheduleHistory.java
@@ -31,7 +31,6 @@ import javax.persistence.TemporalType;
import
org.apache.fineract.infrastructure.core.domain.AbstractPersistableCustom;
import org.apache.fineract.portfolio.loanaccount.domain.Loan;
import
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest;
-import org.apache.fineract.useradministration.domain.AppUser;
@Entity
@Table(name = "m_loan_repayment_schedule_history")
@@ -72,13 +71,11 @@ public class LoanRepaymentScheduleHistory extends
AbstractPersistableCustom {
@Column(name = "created_date")
private Date createdOnDate;
- @ManyToOne
- @JoinColumn(name = "createdby_id")
- private AppUser createdByUser;
+ @Column(name = "createdby_id")
+ private Long createdByUser;
- @ManyToOne
- @JoinColumn(name = "lastmodifiedby_id")
- private AppUser lastModifiedByUser;
+ @Column(name = "lastmodifiedby_id")
+ private Long lastModifiedByUser;
@Temporal(TemporalType.DATE)
@Column(name = "lastmodified_date")
@@ -98,7 +95,7 @@ public class LoanRepaymentScheduleHistory extends
AbstractPersistableCustom {
private LoanRepaymentScheduleHistory(final Loan loan, final
LoanRescheduleRequest loanRescheduleRequest,
final Integer installmentNumber, final Date fromDate, final Date
dueDate, final BigDecimal principal,
final BigDecimal interestCharged, final BigDecimal
feeChargesCharged, final BigDecimal penaltyCharges, final Date createdOnDate,
- final AppUser createdByUser, final AppUser lastModifiedByUser,
final Date lastModifiedOnDate, final Integer version) {
+ final Long createdByUser, final Long lastModifiedByUser, final
Date lastModifiedOnDate, final Integer version) {
this.loan = loan;
this.loanRescheduleRequest = loanRescheduleRequest;
@@ -122,7 +119,7 @@ public class LoanRepaymentScheduleHistory extends
AbstractPersistableCustom {
public static LoanRepaymentScheduleHistory instance(final Loan loan, final
LoanRescheduleRequest loanRescheduleRequest,
final Integer installmentNumber, final Date fromDate, final Date
dueDate, final BigDecimal principal,
final BigDecimal interestCharged, final BigDecimal
feeChargesCharged, final BigDecimal penaltyCharges, final Date createdOnDate,
- final AppUser createdByUser, final AppUser lastModifiedByUser,
final Date lastModifiedOnDate, final Integer version) {
+ final Long createdByUser, final Long lastModifiedByUser, final
Date lastModifiedOnDate, final Integer version) {
return new LoanRepaymentScheduleHistory(loan, loanRescheduleRequest,
installmentNumber, fromDate, dueDate, principal,
interestCharged, feeChargesCharged, penaltyCharges,
createdOnDate, createdByUser, lastModifiedByUser, lastModifiedOnDate,
diff --git
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java
index f926b05fb..70d94c251 100644
---
a/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java
+++
b/fineract-provider/src/main/java/org/apache/fineract/portfolio/loanaccount/loanschedule/service/LoanScheduleHistoryWritePlatformServiceImpl.java
@@ -29,7 +29,6 @@ import
org.apache.fineract.portfolio.loanaccount.domain.LoanRepaymentScheduleIns
import
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistory;
import
org.apache.fineract.portfolio.loanaccount.loanschedule.domain.LoanRepaymentScheduleHistoryRepository;
import
org.apache.fineract.portfolio.loanaccount.rescheduleloan.domain.LoanRescheduleRequest;
-import org.apache.fineract.useradministration.domain.AppUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -79,8 +78,8 @@ public class LoanScheduleHistoryWritePlatformServiceImpl
implements LoanSchedule
createdOnDate =
Date.from(repaymentScheduleInstallment.getCreatedDate().get()); // NOSONAR
}
- final AppUser createdByUser =
repaymentScheduleInstallment.getCreatedBy().orElse(null);
- final AppUser lastModifiedByUser =
repaymentScheduleInstallment.getLastModifiedBy().orElse(null);
+ final Long createdByUser =
repaymentScheduleInstallment.getCreatedBy().orElse(null);
+ final Long lastModifiedByUser =
repaymentScheduleInstallment.getLastModifiedBy().orElse(null);
Date lastModifiedOnDate = null;