您的位置:首页 > 其它

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

2010-06-28 22:25 441 查看
新闻与发送单位之间是 多对多 关系。中间表(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

总结:将多对多关系
设成与关系表之间的一对多关系,简化查询关联的表(两表查询),提高查询效率。应用于只是查询 多对多 关系数据的情况。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: