我有兩個型號:Deck和Word同一個一對多的關系。該Deck模型具有瞬態場showWordsToRevise。我試圖初始化與字的量場List<Words>與statusRepeating == true場。
public class Deck {
@Id
@Column(name = "deck_id")
private Long id;
@Transient
private Boolean showWordsToRevise;
@JsonManagedReference
@OneToMany(mappedBy = "deck", cascade = CascadeType.ALL)
private List<Word> words;
public Boolean getShowWordsToRevise() {
System.out.println(this.words.stream().map(w -> w.getStatusRepeating()).count() " words to revise" java.time.LocalDateTime.now().toString());
return this.words.stream().map(w -> w.getStatusRepeating()).count() > 0;
}
public void setShowWordsToRevise(Boolean showWordsToRevise) {
this.showWordsToRevise = showWordsToRevise;
}
}
和
public class Word {
@Id
@Column(name = "word_id")
private Long id;
private LocalDate last_checked;
@Enumerated(EnumType.STRING)
private WordGroup wordGroup = WordGroup.newUnseen;
@Transient
private Boolean statusRepeating = false;
@ManyToOne
@JsonBackReference
@JoinColumn(name="deck_id",referencedColumnName="deck_id")
private Deck deck;
public Boolean getStatusRepeating() {
if (this.wordGroup == WordGroup.first && Period.between(this.last_checked,LocalDate.now()).getDays() > 1) return true;
if (this.wordGroup == WordGroup.second && Period.between(this.last_checked,LocalDate.now()).getDays() > 2) return true;
return this.wordGroup == WordGroup.third && Period.between(this.last_checked, LocalDate.now()).getDays() > 7;
}
public void setStatusRepeating(Boolean statusRepeating) {
this.statusRepeating = statusRepeating;
}
}
問題是,當有沒有的話List<Words> 用statusRepeating == true在showWordsToRevise中Word仍然回傳true。
JSON
Hibernate 為同一個請求記錄兩次,首先列印錯誤的數字,然后列印正確的數字。更新它在第二次列印時顯示 0 因為沒有單詞List<Words>
Hibernate:
select
words0_.deck_id as deck_id8_3_0_,
words0_.word_id as word_id1_3_0_,
words0_.word_id as word_id1_3_1_,
words0_.body as body2_3_1_,
words0_.deck_id as deck_id8_3_1_,
words0_.definition as definiti3_3_1_,
words0_.example as example4_3_1_,
words0_.last_checked as last_che5_3_1_,
words0_.transcription as transcri6_3_1_,
words0_.word_group as word_gro7_3_1_
from
word words0_
where
words0_.deck_id=?
1 words to revise2021-10-07T10:28:30.059128400
Hibernate:
select
words0_.deck_id as deck_id8_3_0_,
words0_.word_id as word_id1_3_0_,
words0_.word_id as word_id1_3_1_,
words0_.body as body2_3_1_,
words0_.deck_id as deck_id8_3_1_,
words0_.definition as definiti3_3_1_,
words0_.example as example4_3_1_,
words0_.last_checked as last_che5_3_1_,
words0_.transcription as transcri6_3_1_,
words0_.word_group as word_gro7_3_1_
from
word words0_
where
words0_.deck_id=?
0 words to revise2021-10-07T10:28:30.060126900
uj5u.com熱心網友回復:
您需要更新您的Deck課程并更改getShowWordsToRevise()方法,以便您計算具有statusRepeating == true以下內容的單詞:
public class Deck {
@Id
@Column(name = "deck_id")
private Long id;
@Transient
private Boolean showWordsToRevise;
@JsonManagedReference
@OneToMany(mappedBy = "deck", cascade = CascadeType.ALL)
private List<Word> words;
public Boolean getShowWordsToRevise() {
long wordsToReviseCount = this.words.stream().filter(WordLadder::getStatusRepeating).count();
System.out.println(wordsToReviseCount " words to revise " java.time.LocalDateTime.now());
return wordsToReviseCount > 0;
}
public void setShowWordsToRevise(Boolean showWordsToRevise) {
this.showWordsToRevise = showWordsToRevise;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/318575.html
