spring data jpa 使用過程中出現的坑,請繞行
weLive spring data 的使用過程中出現的問題,以及解決方式
資料庫使用的sqlserver
首先我們這裡有manyToOne 和oneToMany,oneToOne三種表與表之間的對映方式
[email protected](fetch = FetchType.LAZY, targetEntity = LessonInfo.class)
@JoinColumn(name = "versionId", referencedColumnName = "CurrentVersionId")
private LessonInfo lessonInfo;
這裡LessonInfo是一的一方,joinColumn 是兩張表相互對映的欄位對映的欄位,versionId是本表,CurrentVersionId
2. @OneToMany(fetch = FetchType.LAZY, targetEntity = LessonVersionVocabulary.class,
mappedBy = "lessonVocabulary")
private List<LessonVersionVocabulary> lessonVersionVocabularys;
這裡是一對多的對映,這裡targetEntity對應是對映的多的一方的類,mappedBy維護的是本表
3.oneToOne
這個維護於WeliveSession表
@OneToOne(fetch = FetchType.LAZY, targetEntity = WeLiveUser.class)
@JoinColumn(name = "UserGuid", referencedColumnName = "UserGuid")
private WeLiveUser weLiveUser;
oneToOne只需要在一方進行維護即可,這裡考慮一下哪一個類的屬性是你需要手動填充,被動填充的表的資料,可以建立一個weliveUserSessionParam(引數類,來進行引數的接受,接受只夠進行拆分賦值即可)
4,這是一個大坑,因為使用的是sqlsever資料庫,我們使用了JPA TOOLS(eclipse自帶的工具)生產的實體類 他自動生成實體時會在主鍵上加上生成策略,然而對於sqlsever的uniqueidentifier這個屬性的資料時會出現錯誤,error content:String型別無法轉換為uniqueidentifier,解決方式:去掉主鍵生成策略即可
5,又一個大坑,因為spring data jpa 遞迴查詢資料,所以在轉換為json資料時容易出現錯誤
在我們遞迴查詢完資料時,在轉換json時候就不需要查詢了
解決方式:在實體上新增這個屬性
@JsonIgnoreProperties(value = { "lessonVersionVocabularys", "isDeleted", "isEnabled", "handler",
"hibernateLazyInitializer" })
JPA的大坑基本就上面這麼多,後面如果還有大坑,還會繼續新增坑的說明,希望不要在有坑了,呵呵噠, NMD
6.如果在儲存資料的時候儲存物件時,物件中有ID 會進行查詢和更新操作,而不是儲存操作
也就是在編輯的時候可能會把你要insert的物件的id也傳送過來了,導致了你下面的操作就是查詢,更新而不是去新增一條資料
,解決辦法就是設定id為空就可以去新增資料了進行insert操作
homeworkQuestionAnswerParam.setId(null);
HomeworkQuestionAnswer homeworkQuestionAnswer = new HomeworkQuestionAnswer();
homeworkQuestionAnswer.setLessonHomework(lessonHomework1);
PropertyUtils.copyProperties(homeworkQuestionAnswer,
homeworkQuestionAnswerParam);
homeworkQuestionAnswer.setCreateTime(new Timestamp(System.currentTimeMillis()));
homeworkQuestionAnswer.setCorrect(homeworkQuestionAnswerParam
.getIsCorrect());
HomeworkQuestionAnswer homeworkQuestionAnswer1 = homeworkQuestionAnswerDao.save(
homeworkQuestionAnswer);