2017-12-26 32 views
0

JPA Employee 영속 엔티티에는 50 개의 필드가 있습니다. 때로는 50 개 필드를 모두 UI에 표시해야하거나 그보다 훨씬 적은 필드를 표시해야하는 경우가 있습니다.Entity 객체 또는 POJO를 UI로 반환 하시겠습니까?

내가

접근 한 생각할 수있는 두 가지 방법이 있습니다 : -

내가 UI에 Employee 개체를 반환 할 것입니다. 내가 반환해야 Employee 아래에있는 특정 필드 말할 수 있습니다 (주석 포함) 가지 방법이 있습니다

예 : -

내가 브라우저에 JSON을 반환하기 전에 직원 클래스 MiddleName를 무시하려면, 그럴 게요 필요한 @JsonIgnoreProperties 같은

@JsonIgnoreProperties({"MiddleName"}) 
public abstract class EmployeeMixin extends Employee{ 

} 




Employee employee = new Employee(); 
Map<Class<?>, Class<?>> mixinMap = new HashMap<Class<?>, Class<?>>(); 
mixinMap.put(Employee.class, EmployeeMixin.class); 
ObjectMapper mapper = new ObjectMapper(mixinMap); 
return mapper.writeValueAsString(employee); 

아래의 접근 방식으로 EmployeeMixin을 만들 수 2 : -

다시 5o 필드를 모두 포함하는 새 POJO를 만들고 UI로 다시 가져옵니다.

제 질문은 어떤 디자인 방식이 더 좋은가요? Entity 객체 또는 새로운 Pojo 객체 (Entity에서 생성)를 UI로 반환해야합니까?

+0

나 한테 접근하면 1 좋다. 같은 필드가있는 새로운 pojo를 만드는 것이 의미가 작기 때문입니다. 그래서 접근법 1을 사용하고 주석을 사용하여 필수 입력란 만 반환하십시오. – Mahesh

답변

0

나는 3이 투영

  • 는 당신이 필요로하는 분야의 변수 세트와 함께 각각의 경우에 대한 DTO 객체를 생성 접근 방식을 선호 할 것입니다.
  • 해당하는 DTO을 채우기 위해 JPQL 또는 CriteriaQuery을 작성하십시오.

entity

처럼
@Entity 
@Getter 
public class Pojo3 { 
    @Id 
    @GeneratedValue 
    private Long id; 
    @Setter 
    private String f1, f2,f3; 
} 

는이 테스트 같은 JPQL에 채울 수 있습니다

@Getter @Setter 
@AllArgsConstructor // Pojo2DTO(id,f1,f2) 
public class Pojo2DTO { 
    private Long id; 
    private String f1,f2; 
} 

같은 필드의 부분 집합으로 DTO 클래스를 만들 수있는 것은

@Test 
@Transactional 
public void test() { 
    Pojo3 pojo3 = new Pojo3(); 
    pojo3.setF1("f1"); 
    pojo3.setF2("f2"); 
    pojo3.setF3("f3");  
    em.persist(pojo3); 

    // **NOTE** the full package path to DTO object 
    TypedQuery<Pojo2DTO> tq = em.createQuery(
     "SELECT NEW org.example.jpa.manyfields.Pojo2DTO(p3.id, p3.f1, p3.f2) " 
     + " FROM Pojo3 p3 WHERE p3.id=:id", Pojo2DTO.class); 
    tq.setParameter("id", pojo3.getId()); 

    Pojo2DTO pojo2dto = tq.getSingleResult(); 
    log.info("{}, {}, {}", pojo2dto.getId(), pojo2dto.getF1(), pojo2dto.getF2()); 

} 
보여줍니다
+0

하지만 접근 _1에 무슨 문제가 있습니까? 접근 _3 함께 각 요구 사항에 특정 복수 DTO를 만들 필요가 – user3198603

+0

@ user3198603 내가 올바르게 이해하면 엔티티 필드에 A1 주석을 추가합니다. 따라서 각 요구 사항에 대해 별도로 엔티티에 주석을 추가하는 방법을 확신하지 못합니까? A3은 엔티티 자체를 그대로 남겨 둡니다. 그러나 내가 잘못 이해 한 경우 A1에서 주석을 어떻게 작성하는지 간단한 예제를 제공 할 수 있습니까? – pirho

+0

접근 방식 1에서 내 게시물의 업데이트를 참조하십시오. – user3198603