今天遇到两个表要相互关联,且两个表的关联字段都是非主属性的情况。
一般情况下我们是用:
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name = "user_userId")。
public User getUser() {
return user;
}
//这是Address类,需要与User类关联,即一个User需要与多个Address(收货地址)对应。
要注意的是,这个user_userId, 指的是Address表中要生成的字段,这个字段默认的与User表的主键关联。
如何手动指定与另一个表中,不是主键的字段关联呢?
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name = "user_userId", referencedColumnName = "userId")。
public User getUser() {
return user;
}
//这是Address类,需要与User类关联,即一个User需要与多个Address(收货地址)对应。
这个userId,就是我们要与另一个表关联的非主键字段!
然后还要注意,两个实体类一定要继承Serializable接口!
就酱!
然后要注意的是:
name = "user_userId", referencedColumnName = "userId" 这两个值千万不能相同哦!否则建表的时候就还跟原来一样了!!referencedColumnName = "userId"这一句就等于是没加了!!!
然后,xml中怎么表达呢?
<many-to-one name="user_userId" class="Address" property-ref="userId">
就酱!