JPA 多对多关联查询

假设有两张表user和goods,中间表为user_goods.
JPA定义

User类:

@ManytoMany(cascade={CascadeType.PERSIST,CascadeType.REFRESH,CascadeType.MERGE)

@JoinTable(name="user_goods",
joinColumns={@JoinColumn(name="user_id",referencedColumnName="user_id")},
inverseJoinColums={@JoinColumn(name="goods_id",referencedColumnName="goods_id")}

private Set<Goods> goods=new HashSet<Goods>();

Goods 类
如果goods能不参与表的维护。那么定义为:

@ManyToMany(mappedBy="goods")
private Set<User> users=new HashSet<User>();

如果参与维护,那么定义与User类相同。

关联查询:

String hql="select user, goods from User user join user.goods goods where user.user_id='xxxx'";

List<Object[]> list=userDao.getUserGoods(hql);
for(Object[] object:list)
{
    User user=(User)object[0];
    Goods goods=(Goods)object[1];
    ...
}   

select 也可以如下:

select user.username,..., goods.goodtype... from User user join user.goods goods where user.user_id='xxxx'"

以上是内联模式,其他模式同理。
本人新手,方法性能可能比较差,如果更好的办法,烦请告知。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值