2017-10-28 15 views
0

daysCalendar 클래스의 일시적인 변수입니다. CalendarDay 클래스는이라는 필드를 통해 Calendar 클래스에 대한 외래 키 참조를 갖습니다.JPA에서 @Transient 필드를 채우는 방법은 무엇입니까?

Calendar 개체를 가져 오면 days 필드가 null로 유지됩니다. 필드를 채우려면 어떻게해야합니까?

@Entity 
@Table(name = "calendars") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
@Document(indexName = "calendars") 
public class Calendar extends Node { 

    @Transient 
    @OneToMany(fetch = FetchType.EAGER) 
    @CollectionTable(name = "calendar_days", joinColumns = @JoinColumn(name = "calendarid")) 
    protected List<CalendarDay> days; 
    @JsonProperty("Days") 
    public List<CalendarDay> getDays() { 
     return days; 
    } 

    @JsonProperty("Days") 
    public void setDays(List<CalendarDay> days) { 
     this.days = days; 
    } 
} 

@Entity 
@Table(name = "calendar_days") 
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) 
@Document(indexName = "calendar_days") 
public class CalendarDay extends General { 

    @ManyToOne 
    @JoinColumn(name = "calendarid") 
    protected Calendar calendarId; 

} 

여기 Days는 null입니다. Calendar 클래스의 days 변수는 일시적인 변수입니다. JPA에서이 임시 변수를 채우려면 어떻게해야합니까?

{"calendars": { 
    "rows": [ 
     { 
      "parentId": null, 
      "phantomParentId": null, 
      "children": null, 
      "expanded": false, 
      "index": null, 
      "leaf": true, 
      "Id": 1, 
      "Name": "General", 
      "DaysPerMonth": 20, 
      "DaysPerWeek": 5, 
      "HoursPerDay": 8, 
      "WeekendsAreWorkdays": false, 
      "WeekendFirstDay": 6, 
      "WeekendSecondDay": 0, 
      "DefaultAvailability": [ 
       "08:00-12:00", 
       "13:00-17:00" 
      ], 
      **"Days": null** 
     } 
     ] 
     } 
} 
+2

어떻게 그것을 할 수 과도기와 실재물일까요? 귀하의 질문은 절대 의미가 없습니다. –

+0

질문을 편집하십시오. JSON 응답을 기반으로 요일을 채우시겠습니까? 더 자세하게 질문 할 필요가있는 것을 말하십시오. – pirho

+0

아니면 _response_는 JSON으로 달력을 직렬화 한 결과일까요? – pirho

답변

1

때문에 days 주석 @Transient의이 유지되지 않습니다 :

다음

는 반응이다. 데이터베이스에서 가져올 때 따라서 null 남아 있습니다.

과도 변수는 Java 키워드 또는 지속됨 - JPA 주석 @Transient을 직렬화 할 때 무시되는 변수입니다.

이러한 값은 예를 들어 계산 된 데이터 또는 다른 변수에서 파생 된 데이터를 보유 할 수 있습니다. 이 경우 값은 계산 된 값 중 일부가 변경되지 않으면 다시 계산할 필요가 없도록 한 번 계산되어 변수에 저장됩니다.

그렇다면 충분한 이유 때문에 @Transient이라고 가정하면 직접 가져온 후에 days의 값을 계산해야합니다. JSON을 기반으로하고 싶다고 가정하면, 예를 들어 JSON에서 필수 필드를 가져 와서 해당 값을 기준으로 days을 채우는 메소드를 작성해야합니다.

JSON이 클래스 직렬화의 결과라면 아무 래도 days을 계산해야하며 여전히 @Transient이라고 가정합니다.

하지만 첫 번째 주석가가 말한대로 JPA 주석 조합은 정상적인 것이 아닙니다. 어쩌면 @Transient 주석을 제거하려고합니다. 따라서 JSON에서 값을 한 번 계산하면 db에 해당 값을 유지할 수 있습니다. 읽고 주석 @Transient 키워드 transient하고 JSON을 처리하기 때문에이 좋을 수의 차이에 대해도 이상

Why does JPA have a @Transient annotation?

: 자세한 내용을 참조하십시오

JPA Transient Annotation and JSON