spring data jpa 使用过程中出现的坑,请绕行

weLive spring data 的使用过程中出现的问题,以及解决方式

数据库使用的sqlserver

首先我们这里有manyToOne 和oneToMany,oneToOne三种表与表之间的映射方式

1.@ManyToOne(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 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);

你可能感兴趣的:(spring data jpa 使用过程中出现的坑,请绕行)