hibernate 复合主键 关联查询
















通常在使用联合主键,也意味着这些列也是别的表的主键,既是主键,又是外键,这是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);

你可能感兴趣的:(hibernate 复合主键 关联查询)