hibernate 复合主键 关联查询

<hibernate-mapping>
<class name="com.wht.tables.MerchantFeeRate" table="MERCHANT_FEE_RATE" dynamic-update="true">
<composite-id name="id" class="com.wht.tables.MerchantFeeRateId">
<key-many-to-one name="merchant" class="com.wht.tables.Merchant">
<column name="MERCHANT_NO" length="20" />
</key-many-to-one>
<key-many-to-one name="tradeType" class="com.wht.tables.TradeType">
<column name="TRADE_TYPE" length="4" />
</key-many-to-one>
</composite-id>
<property name="rate" type="java.math.BigDecimal">
<column name="RATE" precision="6" scale="4" not-null="true" />
</property>
</class>
</hibernate-mapping>

通常在使用联合主键,也意味着这些列也是别的表的主键,既是主键,又是外键,这是hibernate映射中比较复杂的情况。对于双主键,双外键这种常见的情况将会带来如下问题:

1. 排序字段怎么写?
只能写id;hibernate相当于会按照该表的主键排序。
如果我们想按照关联表的某个其它字段来排序呢?因为主键通常是编号,通常我们希望排序的是名称字段什么的。
qb.getDetachedCriteria().setFetchMode("id.merchant", FetchMode.JOIN);
qb.getDetachedCriteria().createAlias("id.merchant", "c");
qb.addOrderBy(Order.asc("c.merchantName"));
结论是:通过id类无法关联到关联表,inner join不上关联表,不知道为什么。是不支持这么操作还是什么原因?

2. 查询条件有可能是关联表的某列,如何进行关联?
当前没有解决1,2问题,所以没有单独映射主键类,从而此处变通,使用了hql查询,返回数据中由于包含了关联表的字段。所以返回结果成了数组。不能按照对象去取。

3. 如何唯一确定一条记录?
这个比较好办,构造id对象,然后使用条件查询:
CardSubTypeId cardSubTypeId = new CardSubTypeId(selectedMainType, cardParaInfo.getCardSubTypeId().getCardSubType());
Criterion [] criterion = new Criterion[]{Restrictions.eq("cardSubTypeId", cardSubTypeId)};
CardPara cp = (CardPara)cardParaDao.getFirst(CardPara.class, criterion);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值