jpa多表关联,jpa联合主键
目录
JPA单项一对多外键关联作业的装配区(JobPackArea)外键关联保存踩坑解决
JPA单项一对多外键关联
一对多即一个对象中包含又另外一个对象的集合。
User主表代码
@ Table(name= USER )@ entity public class USER {私有整数id;私有字符串用户名;私有字符串用户密码私有字符串用户地址私人LIST ORDER LIST ORDER @ join column(name= LIST _ ORDER )@ onet omany(fetch=fetch type .懒惰,cascade=CascadeType .REMOVE)public list order getlist order(){ return list order;} public void set list order(list order list order){ this。列表顺序=列表顺序;} @ Id @ table generator(name= PK _ PRIMARY ,table=order_user_sque ,pkColumnName=pk_column ,pkColumnValue=pk_column ,value column name= PK _ column _ value ,分配大小=1)@ generated value(strategy=生成类型.TABLE,generator= PK _ PRIMARY )public Integer getId(){ return id;} public void setId(Integer id){ this。id=id} @ Column(name= USERNAME )public String get USERNAME(){ return USERNAME;} public void set username(字符串用户名){ this。用户名=用户名;} @ Column(name= user password )公共字符串get user password(){ return user password;} public void setuser password(字符串用户密码){ this。用户密码=用户密码;} @ Column(name= user address )公共字符串get user address(){ return user address;} public void set用户地址(字符串用户地址){ this。用户地址=用户地址;}}代码中:@联接列(name= LIST _ ORDER )-表示将外键名设置为列表_订单
@OneToMany(fetch=FetchType .懒惰,cascade=CascadeType .移除)- OneToMany中取得表示查询时的加载模式[懒加载还是积极加载],级联属性表示要级联操作的模式,此处为删除主表后从表一并删除。
Order从表代码
@Entity@Table(name=ORDER_USER )公共类订单{私有整数id私有字符串订单名称//私有用户用户;@ Id @ generated value public Integer getId(){ return Id;} public void setId(Integer id){ this。id=id} public String get orderName(){ return orderName;} public void set orderName(String orderName){ this。orderName=orderName}}
JPA外键关联保存踩坑
比如:用户表关联了用户地址的主键
在用户还没有设置地址的时候能单独添加用户和更新用户的个人信息但是当用户添加地址的时候去更新数据的时候作业的装配区(JobPackArea)却是插入数据而不是更新数据、这个时候用户表中的唯一字段则会报错、信息已存在!
这样关联的
一度迷茫
后来通过结构化查询语言打印日记查看到
作业的装配区(JobPackArea)在进行关联操作的时候会通过外键查询一次、由于还没绑定外键查询为空这时候作业的装配区(JobPackArea)就会以为是新增操作,则进行插入操作
解决
去掉可选=假
源码提示
翻译
/***(可选)关联是否可选。 如果设置*为假的,则必须始终存在非空关系。*/
细节决定成败
以上为个人经验,希望能给大家一个参考,也希望大家多多支持盛行它.
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。