联合主键的关系表建立PO使用

新闻与发送单位之间是 多对多 关系。中间表(ISOAT17) 包含两主键关联ID,是联合主键。

中间表字段
Name Code Data Type Primary Foreign Key Mandatory
新闻编 号 NEWSID BIGINT TRUE TRUE TRUE
单位编号 CORPID BIGINT TRUE TRUE TRUE
 
将新闻与中间表改成一对多关系,通过中间表查询(得到单位ID),减少再关联单位表查询引起的效率问题,用于不获取单位具体信息情况
1 新闻PO
Long id;
String content;
Set receivers;//发送单位
    /**
     * 公司
  * @return Returns the receivers.
  * @hibernate.collection-one-to-many class="com.shtobacco.es.xx.po.NewsReceiver"
  * @hibernate.collection-key column="NEWSID"
  * @hibernate.set table="ISOAT17" lazy="true" cascade="none" 
  */
 public Set getReceivers() {
  return receivers;
 }
...
}
新闻hibernate.xml 将多对多关系设成一对多
<set
            name="receivers"
            table="ISOAT17"
            lazy="true"
            cascade="none"
            sort="unsorted"
        >
            <key
                column="NEWSID"
            >
            </key>
            <one-to-many
                  class="com.shtobacco.es.xx.po.NewsReceiver"
            />
        </set>
 
2建立联合主键类,无映身文件
public class NewsReceiverId implements Serializable{
 private RecentNews news
 private Long corpID;
...
}
3建立中间表PO,包含联合主键类
 * @hibernate.class table="ISOAT17" lazy="true" dynamic-insert="true"
 *                  dynamic-update="true"
 */
public class NewsReceiver implements Serializable {
 
 private NewsReceiverId id;
 /**
  * @hibernate.id
  * @return
  */
 public NewsReceiverId getId() {
  return id;
 }
 public void setId(NewsReceiverId id) {
  this.id = id;
 }
}
中间表PO配置文件 有多对一关系,本例未使用到
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
    " http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd ">
<hibernate-mapping>
    <class
        name="com.shtobacco.es.xx.po.NewsReceiver"
        table="ISOAT17"
        lazy="true"
        dynamic-update="true"
        dynamic-insert="true"   
    >
<composite-id   name="id"   class="com.shtobacco.es.xx.po.NewsReceiverId"   unsaved-value="any"   >    
      <key-many-to-one   name="news"   column="newsID"   class="com.shtobacco.es.xx.po.RecentNews"   />    
      <key-property   name="corpID"   column="corpID"   type="java.lang.Long"   />    
  </composite-id> 
 
  </class>
</hibernate-mapping>
 
4 DAO中调用HQL写法
from RecentNews as rb left join rb.receivers as nr(中间表PO) where nr.id.corpID= 1  or nr.id.corpID is Null
总结:将多对多关系  设成与关系表之间的一对多关系,简化查询关联的表(两表查询),提高查询效率。应用于只是查询 多对多 关系数据的情况。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值