使用hibernate实现一个表的主键,同时以也是另一个表的主键

先说说场景:

我有两个表,一个用户表,一个用户基本信息表

用户表中保存一些不常改的信息,比如用户名 密码等

用户信息表中保存一些可能会被常常更改的东西,如登录时间

用户表 userpo

字段 userpoid username userpass

用户信息表  userinfo

字段 userinfoid  redate


因为一个用户表只对应着一个用户信息表,当我们删除用户表时,用户信息表也相应的要被删除。

我们这里可以用到级联保存和删除 ,我们的目的之一就是使用户信息表的id主键和用户表的id主键保持一致

要做到这一点,我们需要做以下三步:

第一步:在各自的实体类中定义对象类,代码如下,代码神略set和get方法


用户信息表定义:
private userloginpo ulp;

用户信息表定义
private userlogininfo ulinfo;
第二步:定义配置文件


用户表的配置文件如下:


<id name="userid" type="java.lang.Integer">
	<column name="userid" />
	<generator class="sequence"/>
</id>
神略其他
<one-to-one name="ulinfo" class="emb.model.hibernate.po.userlogininfo" cascade="save-update" />
主要是用户信息表的配置,可能需要我们一点时间来理解:



主要是这里的id配置
<id name="userid" type="java.lang.Integer">
	<column name="userid" />
这里的foreign关键字用以指明,这里的id由ulp来指定
而ulp是什么呢,我们下面的one-to-one已经定义了ulp,即是用户表。
这里我们在保存用户表时就可以自动以用户表的主键id作为用户信息表的主键id了
	<generator class="foreign">
		<param name="property">ulp</param>
	</generator>
</id>

中间神略其他

<one-to-one name="ulp" class="emb.model.hibernate.po.userloginpo" constrained="true" lazy="proxy"/>


foreign关键字的说明,大家可以查看这里

https://www.bugkong.com/archives/2015_04_294.html


爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img