1. 程式人生 > >spring data jpa 使用過程中出現的坑,請繞行

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

是另外一個表,這裡我們需要注意如果我們使用了本表的versionId欄位與對方進行對映,本類本來生成的versionId欄位屬性需要刪除。

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);