2017-10-28 6 views
0

daysCalendarクラスの過渡変化です。 CalendarDayクラスは、フィールドcalendarIdCalendarクラスへの外部キー参照を持ちます。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

ため@Transient注釈daysのは永続化されません。したがって、データベースからフェッチするときは、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

関連する問題