Hibernate Annotation注释实现联合主键和一对多关联的示例

[b]需求:[/b]
1.有一个User类,有如下属性:
String username; //PK
String password;
Set grantedAuthority; //一对多关联到Authorities
2.有一个Authorities,有如下属性:
String username; //主键1
String authority; //主键2
要实现如注释所示的表关系。

[b]做法:[/b]
一。联合主键的制作
网上有三种方法,我用的是@IdClass标签的方法。
需要为联合主键多做一个类AuthoritiesPK([color=blue]需要实现Serializable接口[/color])来实现主键的联合,其中属性只需要有联合主键的字段就行了,并且为它们实现get和set方法,这个类[color=red]不需要做任何的annotation标记[/color]。
另一个Authorities类在@Entity标记下面添加一个@IdClass(AuthoritiesPK.class),[color=blue][u]括号里面的是前面那个新建的类[/u][/color]。然后再在Authorities类中的主键的get方法前添加@Id标签就可以了。
*别忘了mapping文件,只要对User和Authorities两个类做映射就行了,不用做那个AuthoritiesPK的。

二。一对多关联
我原先的设置是这样的,这是个[color=red]错误的配置[/color]。

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name="authorities",
joinColumns=@JoinColumn(name="username"))
public Set getGrantedAuthorities() {
return grantedAuthorities;
}

这样配置最后在生成表的时候,User和Authorities关联会多出来两个列"grantedAuthorities_username"和"grantedAuthorities_password"并且在使用过程中会出错。
正确的配置如下:

@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinColumn(name="username")
public Set getGrantedAuthorities() {
return grantedAuthorities;
}

这样Authorities表中的username属性就被正确的和User表中的username关联起来的。

[color=red]*重要的提示![/color]
顺带一提的事这个JoinColumn的意义是从表(Authority)中的这个字段(username)和主表(User)的主键(username这个不是配置里面的那个username要注意哦!)相互关联。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值