[转载]read-atleap-Hibernate部分分析2-CreateNews

read-atleap-Hibernate部分分析2-CreateNews
read-atleap-Hibernate 部分分析 2-CreateNews

<!--[if !vml]--&gt

20060217145834397.gif

<!--[endif]--&gt

  主要的类:

ª com.blandware.atleap.persistence.hibernate.news. NewsDAOHibernate.CreateNewsItem

ª com.blandware.atleap.persistence.hibernate.news. NewsDAOHibernate. ListNewsItems

Ø 数据结构分析

ª NewsItem继承与Page

ª Page又继承与Localizable

ª Localizable.hbm.xml中的Page映射定义

name="com.blandware.atleap.model.core.Page"

table="page"

dynamic-update="false"

dynamic-insert="false"

lazy="false"

>

column="localizable_id"

/>

name="com.blandware.atleap.model.news.NewsItem"

table="news_item"

dynamic-update="false"

dynamic-insert="false"

lazy="false"

>

column="page_id"

/>

name="publicationDate"

type="date"

update="true"

insert="true"

access="property"

column="publication_date"

not-null="false"

/>

ª news_item表内容

mysql> select * from news_item;

+---------+------------------+

| page_id | publication_date |

+---------+------------------+

| 47 | 2005-02-27 |

+---------+------------------+

ª page表内容

+----------------+-----------------------------------+---------------+--------+

| localizable_id | uri | usage_counter | active |

+----------------+-----------------------------------+---------------+--------+

| 2 | /login | 0 | T |

Ø 建立新闻业务过程分析

<!--[if !supportLists]--&gtI) <!--[endif]--&gtnewsItemId = newsManager.createNewsItem(newsItem);

public Long createNewsItem(NewsItem newsItem) {

//1.保持newsItem进数据库

Long newsItemId = (Long) getHibernateTemplate().save(newsItem);

//2.newsItem添加名为“title”的contentField

newsItem.addContentField(fTitle) ;

getHibernateTemplate().save(fTitle);

//3.newsItem添加名为“annotation”的contentField

//4.newsItem添加名为“body”的contentField

//5.newsItem添加名为“title”的contentFieldValue

//6.newsItem添加名为“annotation”的contentFieldValue

//7.newsItem添加名为“body”的contentFieldValue

© 插入数据库时先插入父类表中的数据(localizable),在插入子类表中的数据(page

news_item),最后插入关联关系的表中数据(fieldfield_value

执行的SQL

Hibernate: insert into localizable (version, class_name, id) values (?, ?, ?)

Hibernate: insert into page (uri, usage_counter, active, localizable_id) values

(?, ?, ?, ?)

Hibernate: insert into news_item (publication_date, page_id) values (?, ?)

Hibernate: insert into field (version, identifier, localizable_id, type, interna

l, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field (version, identifier, localizable_id, type, interna

l, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field (version, identifier, localizable_id, type, interna

l, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field_value (version, locale_identifier, simple_value, fi

eld_id, last_updated, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field_value (version, locale_identifier, value, field_id,

last_updated, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field_value (version, locale_identifier, value, field_id,

last_updated, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field_value (version, locale_identifier, simple_value, fi

eld_id, last_updated, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field_value (version, locale_identifier, value, field_id,

last_updated, id) values (?, ?, ?, ?, ?, ?)

Hibernate: insert into field_value (version, locale_identifier, value, field_id,

last_updated, id) values (?, ?, ?, ?, ?, ?)

<!--[if !supportLists]--&gtII) <!--[endif]--&gtnewsItem.setUri(uri);

uri="/rw/news/newsItemId"

newsManager.updateNewsItem(newsItem);

执行的SQL

Hibernate: update field_value set version=?, last_updated=? where id=? and versi

Hibernate: update localizable set version=?, class_name=? where id=? and version

=?

Hibernate: update page set uri=?, usage_counter=?, active=? where localizable_id

=?

Hibernate: update news_item set publication_date=? where page_id=?

<!--[if !supportLists]--&gtIII) <!--[endif]--&gt index news item

SearchManager searchManager =

SearchManager.getInstance(request.getSession().getServletContext());

searchManager.reIndexPage(newsItem, request);

<!--[if !supportLists]--&gtIV) <!--[endif]--&gtreturn mapping.findForward("listNewsItems");

Ø 显示新闻列表

Ü

name="listNewsItems"

path="/news/listItems.do"

redirect="true"

/>

Ü

path="/news/listItems"

type="com.blandware.atleap.webapp.action.news.ListNewsItemsAction"

name="newsItemForm"

scope="request"

roles="manager"

unknown="false"

validate="false"

>

name="listNewsItems"

path=".news.listItems"

redirect="false"

/>

Ø 显示新闻列表业务过程分析

<!--[if !supportLists]--&gt1) <!--[endif]--&gt设置查询参数

<!--[if !supportLists]--&gt2) <!--[endif]--&gt从数据库中检索新闻列表

List newsItems = newsManager.listNewsItems(queryInfo).asList();

<!--[if !supportLists]--&gt3) <!--[endif]--&gt将查询得到的newsItems存入request作用域

request.setAttribute(NewsModuleWebConstants.NEWS_ITEMS_COLLECTION_KEY,

newsItems);

<!--[if !supportLists]--&gt4) <!--[endif]--&gtreturn mapping.findForward("listNewsItems");

listItems.jsp" />

© 显示新闻列表时执行的

HQL

select distinct item, title.simpleValue, annotation.value from NewsItem as item

left outer join item.contentFields as titleField left outer join item.contentFie

lds as annotationField left outer join item.contentFields as bodyField left oute

r join titleField.contentFieldValues as title left outer join annotationField.co

ntentFieldValues as annotation left outer join bodyField.contentFieldValues as b

ody left outer join item.roles as role where titleField.identifier = 'title' and

annotationField.identifier = 'annotation' and bodyField.identifier = 'body' and

title.contentLocale = annotation.contentLocale and title.contentLocale = body.c

ontentLocale and title.contentLocale.identifier = ? order by item.publicationDa

te desc, title.simpleValue asc

对应SQL

Hibernate: select distinct newsitem0_.page_id as id, newsitem0_.publication_date

as publicat2_11_, newsitem0__1_.uri as uri6_, newsitem0__1_.usage_counter as us

age_co3_6_, newsitem0__1_.active as active6_, newsitem0__2_.version as version0_

, newsitem0__2_.class_name as class_name0_, newsitem0_.page_id as x0_0_, content

fie4_.simple_value as x1_0_, contentfie5_.value as x2_0_ from news_item newsitem

0_ inner join page newsitem0__1_ on newsitem0_.page_id=newsitem0__1_.localizable

_id inner join localizable newsitem0__2_ on newsitem0_.page_id=newsitem0__2_.id

left outer join field contentfie1_ on newsitem0_.page_id=contentfie1_.localizabl

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/374079/viewspace-131326/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/374079/viewspace-131326/

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值