hibernate 表关系的维护 主要通过如@oneToOne等标签标记。在这些关系中,重要的是mappedby的设置。
如:
@OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.REMOVE }, mappedBy="user", fetch = FetchType.LAZY)
@JoinColumn(name = "location_id", referencedColumnName = "id")
private UserLocation location;
@OneToOne(cascade = { CascadeType.PERSIST, CascadeType.MERGE,
CascadeType.REMOVE }, mappedBy="user", fetch = FetchType.LAZY)
@JoinColumn(name = "userinfo_id", referencedColumnName = "id")
private Userinfo userinfo;
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.REFRESH,
CascadeType.MERGE }, mappedBy = "user", fetch = FetchType.LAZY)
@OrderBy("id asc")
private List<Album> albums;
这三个属性,都设置了mappedBy,则说明他和这三个实体UserLocation, Userinfo, Album之间的关系由这三个实体中来维护,‘维护’的意思是说,这三个实体会出现与user的关联关系字段,既user_id(字段名称取决于mappedBy对应user在三个实体中对user_id起的具体名字)。 同时,user_id这个关系字段的增加、删除、修改均由三个实体发起,不能由User发起。
如:
public Userinfo getUserinfo() {
if (userinfo == null){
userinfo = new Userinfo();//CascadeType.PERSIST
userinfo.setUser(this);//mappedby user, set "user_id" in userinfo
}
return userinfo;
}
public List<Album> getAlbums() {
if (albums == null){
Album headAlbum = new Album();
headAlbum.setUser(this);
albums = new ArrayList<Album>();
albums.add(headAlbum);
}
return albums;
}
public UserLocation getLocation() {
if (location == null){
location = new UserLocation();
location.setUser(this);
}
return location;
}
在三个实体中分别定义User
UserLocation:
@OneToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
UserInfo:
@OneToOne(cascade = { CascadeType.REFRESH, CascadeType.MERGE }, fetch = FetchType.LAZY)
@JoinColumn(name = "user_id", referencedColumnName = "id")
private User user;
Album:
@OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REMOVE }, fetch = FetchType.LAZY, mappedBy = "album", targetEntity = UserPhoto.class)
@OrderBy("rank asc")
private List<UserPhoto> photos;
然后对这些属性进行设置:
//transfer UserinfoDto to userinfo
if (userinfo != null){
userinfo.toObject(user.getUserinfo());
}
// create user photo wall Album
user.getAlbums();
if (location != null) {
location.toObject(user.getLocation());
}
如果去掉user中 userinfo中的定义 mappedBy="user",则各自维护自己的关系,那么
user表中会有userinfo_id值,userinfo中有user_id. 当设置了user.setUserinfo(new Userinfo()), 则会在user中设置userinfo_id, 设置了userinfo.setUser(user),则对应。
标签@JoinColumn(name = "userinfo_id", referencedColumnName = "id") ,userinfo_id为在user表中外键,对应userinfo表中的id主键。如果不需要在user中有userinfo的id,则删除该标签
分享到:
相关推荐
在数据库设计中,这种关系通常通过主键和外键的方式实现,其中一方的主键作为另一方的外键,确保了两表间的一对一关系。 二、唯一外键关联映射 在Hibernate中,一对一关联可以通过配置XML映射文件或使用注解来实现...
@OneToOne(mappedBy = "user") private IdCard idCard; } @Entity public class IdCard { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @OneToOne @PrimaryKeyJoinColumn ...
@ManyToMany(mappedBy = "teachers") private Set<Student> students; // getters and setters } ``` - `Student`类: ```java @Entity public class Student { @Id @GeneratedValue(strategy = ...
少儿编程scratch项目源代码文件案例素材-直升机飞行.zip
wanjunshe_Python-Tensorflow_12888_1745868924470
健康监测_Android开发_BLE蓝牙通信_心率数据采集与存储_基于小米手环2的实时心率监测应用_支持后台长时间运行的心率记录工具_可导出SQLite数据库的心率数据分析系统_适
少儿编程scratch项目源代码文件案例素材-种花模拟器.zip
嵌入式系统开发_FreeRTOS实时操作系统_STM32F103C8T6微控制器_OLED显示屏_DHT11温湿度传感器_多任务调度_多级菜单设计_万年历算法_电子闹钟功能_参数配
基于python实现的粒子群的VRP(车辆配送路径规划)问题建模求解+源码+项目文档+算法解析,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用,详情见md文档 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。 算法设计的关键在于如何向表现较好的个体学习,标准粒子群算法引入惯性因子w、自我认知因子c1、社会认知因子c2分别作为自身、当代最优解和历史最优解的权重,指导粒子速度和位置的更新,这在求解函数极值问题时比较容易实现,而在VRP问题上,速度位置的更新则难以直接采用加权的方式进行,一个常见的方法是采用基于遗传算法交叉算子的混合型粒子群算法进行求解,这里采用顺序交叉算子,对惯性因子w、自我认知因子c1、社会认知因子c2则以w/(w+c1+c2),c1/(w+c1+c2),c2/(w+c1+c2)的概率接受粒子本身、当前最优解、全局最优解交叉的父代之一(即按概率选择其中一个作为父代,不加权)。
scratch少儿编程逻辑思维游戏源码-猫猫粉碎.zip
scratch少儿编程逻辑思维游戏源码-蓝胡子.zip
scratch少儿编程逻辑思维游戏源码-美食大亨.zip
scratch少儿编程逻辑思维游戏源码-洛克人.zip
scratch少儿编程逻辑思维游戏源码-龙冲刺.zip
思幻个人引导页V2.2版本11月29日更新.zip
scratch少儿编程逻辑思维游戏源码-骑士风斩法.zip
移动应用开发_H5CSS3ionicng-cordovaMVVM模式_基于HTML5和CSS3技术实现多页面布局ionic指令数据绑定ui-route单页跳转调用手机
少儿编程scratch项目源代码文件案例素材-植物大战僵尸创造版 Ver. 1.0.3.zip
scratch少儿编程逻辑思维游戏源码-日落(2).zip
动态星空背景个人主页(带后台).zip