회사에서 업무 중 미완성된 알림 서비스(스케쥴러) 소스 코드 중에 정말 잘 만든 소스 코드를 보게되었습니다.

관련 코드에 문제가 있어서 코드 수정하는겸 , 코드에 대해서 공부할겸 관련해서 코드 모사를 가볍게 해봤습니다.

Method getterMethod=property.getClass().getMethod("getWorkflowEntity");
                   Object targetEntity = getterMethod.invoke(property);
@CallerSensitive
    public Method getMethod(String name, Class<?>... parameterTypes)
        throws NoSuchMethodException, SecurityException {
        checkMemberAccess(Member.PUBLIC, Reflection.getCallerClass(), true);
        Method method = getMethod0(name, parameterTypes, true);
        if (method == null) {
            throw new NoSuchMethodException(getName() + "." + name + argumentTypesToString(parameterTypes));
        }
        return method;
    }

 

workflow id 를 통해서 => 부모 workflow의 데이터를 가지고 오려고 하는 의도인듯 했습니다.

 

entity 클래스

@Setter
@Getter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "table")
@EntityListeners(AuditingEntityListener.class)
public class PropertyEntity extends BaseEntity {

	@GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
	long seq_id;

	String workflowid;

	String workid;

	@OneToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "workflow_seq", referencedColumnName = "seq")
	WorkflowEntity workflowEntity;

	public static PropertyEntity of(String workflowid) {
		return PropertyEntity.builder()
				.workflow_definition_key(workflowid)
			.build();
	}

	public static PropertyEntity of(String workflowid, String workid) {
	   return PropertyEntity.builder()
			 .workflow_definition_key(workflowid)
			   .taskId(workid)
		   .build();
	}

	public static PropertyEntity ofProperty(String workid, String workflowid) throws JsonProcessingException {
		return PropertyEntity.builder()
				.taskId(workid)
				.workflow_definition_key(workflowid)
				.build();
	}
}

 

관련 propertyEntity table이고 WorkFlowEntity db Join을 하여 seq를 통해서 one to one 관계를 가집니다. 

이후 데이터를 invoke를 통해서 workflowEntity 테이블의 모든 데이터를 가져올수 있습니다.

 

개인적으로 봐도 정말 잘 만든 코드여서 비슷하게 다시 구현해서 만들어 봤습니다.

 

' > Spring' 카테고리의 다른 글

Async 어노테이션 ,@Async 비동기 처리  (0) 2025.02.19
@Builder? 와 Bulder 패턴?  (0) 2025.02.12
Spring Data JPA - 구성  (0) 2024.02.25
Spring Data JPA- repository 인터페이스의 정의  (0) 2024.02.18
Spring Data JPA - 핵심 개념  (0) 2024.02.03

+ Recent posts