복붙노트

[SPRING] 게으른 One-To-One Spring JPA 및 "동적"JSON 작성

SPRING

게으른 One-To-One Spring JPA 및 "동적"JSON 작성

저는 Spring Boot를 사용하여 상대적으로 큰 프로젝트를 개발하고 있습니다. 일반적인 방법으로는 꽤 만족하지만, 제 마음 속에는 문제가되지 않아야하는 몇 가지 문제가 있습니다.

나는 언젠가는이 문제 중 하나를 겪었을 수도있는 누군가로부터 몇 가지 지시를 찾고 있습니다. 왜냐하면 그것이 내 마음 속에서 그렇게 힘들어해서는 안되는 문제를 해결할 수 없기 때문에 나를 죽이고 있기 때문입니다.

1 편집

@OneToOne 어노테이션에 optional = false를 추가하여 @snovelli가 제안한대로 OneToOne 관계의 열망한로드를 해결하려고 시도했습니다. 예:

@OneToOne(optional=false, fetch = FetchType.LAZY)
public UserProfile getUserProfile(){ ... }

해결법

  1. ==============================

    1.조인 열이 일대일 연결의 상위가 매핑 된 테이블에 없으면 연결을 지연시킬 수 없습니다. 이유는 JPA 공급자가 프록시를 만들지 여부를 결정할 수 없으므로 나중에 액세스 할 때 개체를로드하거나 null 값을 그대로 남겨 둘 수 있기 때문입니다.

    조인 열이 일대일 연결의 상위가 매핑 된 테이블에 없으면 연결을 지연시킬 수 없습니다. 이유는 JPA 공급자가 프록시를 만들지 여부를 결정할 수 없으므로 나중에 액세스 할 때 개체를로드하거나 null 값을 그대로 남겨 둘 수 있기 때문입니다.

    연결이 선택 사항이 아니더라도 JPA 제공자는 연관된 엔티티 인스턴스의 ID를 판별하여 프록시에 저장해야합니다. 따라서 어쨌든 관련 테이블로 이동해야합니다.

    솔루션 :

  2. ==============================

    2.'동적'JSON : DTO를 사용하십시오.

    '동적'JSON : DTO를 사용하십시오.

    이렇게하면 결과 JSON을 소비하는 클라이언트의 요구에 맞게 직렬화 할 객체를 조정할 수 있다는 장점이 있습니다. 또한, 도메인 모델 (Hibernate 엔티티)은 JSON (de) 직렬화 로직에서 분리되어, 두 가지를 독립적으로 진화시킬 수 있습니다.

  3. ==============================

    3.@OneToOne에 관해서 : 당신은 DB에 대한 데이터의 양 또는 다수의 쿼리에 더 많은 관심을 갖고 있습니까?

    @OneToOne에 관해서 : 당신은 DB에 대한 데이터의 양 또는 다수의 쿼리에 더 많은 관심을 갖고 있습니까?

    이전의 경우 (Spring Roo를 사용할 때 가능하다면) @ManyToOne 관계 모델링 (일대일은 many-to-one의 특별한 경우입니다. 그렇지 않은 경우)을 사용하여 문제를 해결할 수 있습니다.

    후자의 경우 @Embeddable을 사용하여 User와 같은 엔티티를 여러 클래스로 분해하면서 데이터를 DB에 유지할 수 있으므로 하나의 쿼리 만 가져올 수 있습니다.

  4. from https://stackoverflow.com/questions/36061550/lazy-one-to-one-spring-jpa-and-building-dynamic-json by cc-by-sa and MIT license