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字段与对方进行映射,本类本来生成的字段属性需要删除。
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

猜你喜欢

转载自blog.csdn.net/weixin_37970049/article/details/80989818