hibernate一对一关系中,主键由另一个表指定,注解设置方法

比如我这里有两个实体类,userloginpo和userlogininfo


现在userloginpo类部分代码是这样的

public class userloginpo {
	//数据库生成
	private int userid;			//用户id
//.....其他神略
	
	private userlogininfo ulinfo;

        @Id
	@Column(name="luid",unique=true,nullable=false)
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
        @OneToOne(mappedBy = "ulp",fetch = FetchType.LAZY)
	@Cascade({CascadeType.SAVE_UPDATE ,CascadeType.DELETE})
	@JoinColumn(name = "luserid")
	public userlogininfo getUlinfo() {
		return ulinfo;
	}
	public void setUlinfo(userlogininfo ulinfo) {
		this.ulinfo = ulinfo;
	}
接下来我们看看userlogininfo表应该怎么设置:

public class userlogininfo {
	private int userid;				//用户id
	//神略其他
	private userloginpo ulp;
	
	@Id
        @GeneratedValue(generator = "idGenerator")
	@GenericGenerator(name ="idGenerator",strategy="foreign" ,parameters=@Parameter(name="property",value="ulp"))
	public int getUserid() {
		return userid;
	}
	public void setUserid(int userid) {
		this.userid = userid;
	}
	@OneToOne
	@JoinColumn(name="luserid")
	public userloginpo getUlp() {
		return ulp;
	}
	public void setUlp(userloginpo ulp) {
		this.ulp = ulp;
	}
	//神略其他
注解中的关键字foreign就是表示当前的id是由其他字段来指定的:

parameters=@Parameter(name="property",value="ulp")

value的值就是另外一个实体

注意为什么没有在userlogininfo中定义id的数据库信息呢,因为我们指定了他的信息由userloginpo来指定,就是ulp来指定,因为此时ulp中定义的外键就是userlogininfo的主键,既luserid就是他的主键。


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