diff --git a/build.gradle b/build.gradle index 6df5fe6..a91f172 100644 --- a/build.gradle +++ b/build.gradle @@ -87,6 +87,9 @@ dependencies { api "com.querydsl:querydsl-apt:${queryDslVersion}" api "org.mapstruct:mapstruct:1.5.5.Final", "org.projectlombok:lombok:1.18.28" + // JDK 11+ 에서 javax.annotation.* 가 제거되어 (JEP 320) 명시 의존성 필요 + api 'javax.annotation:javax.annotation-api:1.3.2' + // project > properties > Java Compiler > Annoation Processing annotationProcessor "org.projectlombok:lombok:1.18.28", "org.projectlombok:lombok-mapstruct-binding:0.2.0", "org.mapstruct:mapstruct-processor:1.5.5.Final", "com.querydsl:querydsl-apt:${queryDslVersion}:jpa", "jakarta.persistence:jakarta.persistence-api:2.2.3", "jakarta.annotation:jakarta.annotation-api:1.3.5" diff --git a/src/main/java/com/eactive/apim/portal/approval/entity/Approver.java b/src/main/java/com/eactive/apim/portal/approval/entity/Approver.java index 312acd3..6033e06 100644 --- a/src/main/java/com/eactive/apim/portal/approval/entity/Approver.java +++ b/src/main/java/com/eactive/apim/portal/approval/entity/Approver.java @@ -5,9 +5,10 @@ import com.eactive.eai.data.converter.LocalDateTimeToStringConverter17; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; +import org.hibernate.annotations.NotFound; +import org.hibernate.annotations.NotFoundAction; import javax.persistence.*; -import javax.validation.constraints.NotNull; import java.io.Serializable; import java.time.LocalDateTime; @@ -25,12 +26,12 @@ public class Approver implements Serializable, com.eactive.eai.data.Data { @ManyToOne @MapsId("approval") - @JoinColumn(name = "APPROVAL_ID", nullable = false) + @JoinColumn(name = "APPROVAL_ID", nullable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) private Approval approval; - @NotNull @ManyToOne - @JoinColumn(name = "USER_ID", nullable = false) + @JoinColumn(name = "USER_ID", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) + @NotFound(action = NotFoundAction.IGNORE) private UserInfo user; @Enumerated(value = STRING) diff --git a/src/main/java/com/eactive/apim/portal/approval/statemachine/ProcessingState.java b/src/main/java/com/eactive/apim/portal/approval/statemachine/ProcessingState.java index 22a4d0b..cc08b9e 100644 --- a/src/main/java/com/eactive/apim/portal/approval/statemachine/ProcessingState.java +++ b/src/main/java/com/eactive/apim/portal/approval/statemachine/ProcessingState.java @@ -45,7 +45,7 @@ public class ProcessingState implements ApprovalState { boolean statusChanged = false; // Update current approver status and track if it changed for (Approver approver : approval.getApprovers()) { - if (approver.getUser().getId().equals(approverId) && !ApproverStatus.APPROVED.equals(approver.getApproverStatus())) { + if (approver.getUser() != null && approverId.equals(approver.getUser().getId()) && !ApproverStatus.APPROVED.equals(approver.getApproverStatus())) { approver.setApproverStatus(ApproverStatus.APPROVED); approver.setApprovedDate(LocalDateTime.now()); statusChanged = true; @@ -76,7 +76,7 @@ public class ProcessingState implements ApprovalState { String approverId = (String) options.getOrDefault(ApprovalConstants.APPROVER, ""); if (isAuthorizedApprover(approval, approverId, options)) { approval.getApprovers().forEach(approver -> { - if(approver.getUser().getId().equals(approverId)) { + if(approver.getUser() != null && approverId.equals(approver.getUser().getId())) { approver.setApproverStatus(ApproverStatus.DENIED); approver.setApprovedDate(LocalDateTime.now()); String message = (String) options.getOrDefault("message", ""); diff --git a/src/main/java/com/eactive/apim/portal/approval/statemachine/RequestedState.java b/src/main/java/com/eactive/apim/portal/approval/statemachine/RequestedState.java index 5dfd604..e43f273 100644 --- a/src/main/java/com/eactive/apim/portal/approval/statemachine/RequestedState.java +++ b/src/main/java/com/eactive/apim/portal/approval/statemachine/RequestedState.java @@ -48,7 +48,7 @@ public class RequestedState implements ApprovalState { // Update current approver status and track if it changed for (Approver approver : approval.getApprovers()) { - if (approver.getUser().getId().equals(approverId) && !ApproverStatus.APPROVED.equals(approver.getApproverStatus())) { + if (approver.getUser() != null && approverId.equals(approver.getUser().getId()) && !ApproverStatus.APPROVED.equals(approver.getApproverStatus())) { approver.setApproverStatus(ApproverStatus.APPROVED); approver.setApprovedDate(LocalDateTime.now()); statusChanged = true; @@ -78,7 +78,7 @@ public class RequestedState implements ApprovalState { String approverId = (String) options.getOrDefault(ApprovalConstants.APPROVER, ""); if (isAuthorizedApprover(approval, approverId, options)) { approval.getApprovers().forEach(approver -> { - if (approver.getUser().getId().equals(approverId)) { + if (approver.getUser() != null && approverId.equals(approver.getUser().getId())) { approver.setApproverStatus(ApproverStatus.DENIED); approver.setApprovedDate(LocalDateTime.now()); String message = (String) options.getOrDefault("message", ""); @@ -97,7 +97,7 @@ public class RequestedState implements ApprovalState { String approverId = (String) options.getOrDefault(ApprovalConstants.APPROVER, ""); if (isAuthorizedApprover(approval, approverId, options)) { approval.getApprovers().forEach(approver -> { - if (approver.getUser().getId().equals(approverId)) { + if (approver.getUser() != null && approverId.equals(approver.getUser().getId())) { approver.setApproverStatus(ApproverStatus.CANCELED); approver.setApprovedDate(LocalDateTime.now()); } diff --git a/src/main/java/com/eactive/apim/portal/file/service/FileSystemBinaryStorage.java b/src/main/java/com/eactive/apim/portal/file/service/FileSystemBinaryStorage.java index 26b9817..c5f50a5 100644 --- a/src/main/java/com/eactive/apim/portal/file/service/FileSystemBinaryStorage.java +++ b/src/main/java/com/eactive/apim/portal/file/service/FileSystemBinaryStorage.java @@ -3,6 +3,7 @@ package com.eactive.apim.portal.file.service; import static com.eactive.apim.portal.file.service.StorageType.FILESYSTEM; import com.eactive.apim.portal.portalproperty.service.PortalPropertyService; +import java.io.FileNotFoundException; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; diff --git a/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java b/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java index e2265b5..df5dfbd 100644 --- a/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java +++ b/src/main/java/com/eactive/apim/portal/qna/entity/Inquiry.java @@ -79,7 +79,8 @@ public class Inquiry extends Auditable { * 응답자 */ @ManyToOne - @JoinColumn(name = "RESPONDER_ID") + @JoinColumn(name = "RESPONDER_ID", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) + @NotFound(action = NotFoundAction.IGNORE) private UserInfo responder; @Column(name = "ATTACH_FILE") diff --git a/src/main/java/com/eactive/apim/portal/template/service/MessageRecipient.java b/src/main/java/com/eactive/apim/portal/template/service/MessageRecipient.java index 8d1d2b0..0d7fa74 100644 --- a/src/main/java/com/eactive/apim/portal/template/service/MessageRecipient.java +++ b/src/main/java/com/eactive/apim/portal/template/service/MessageRecipient.java @@ -1,11 +1,8 @@ package com.eactive.apim.portal.template.service; import com.eactive.apim.portal.portaluser.entity.PortalUser; -import kjb.safedb.KjbNotRnnoJpaAttributeConverter; import lombok.*; -import javax.persistence.Convert; - @Data @ToString @EqualsAndHashCode