read-atleap-hibernate部分分析2-Field类

本文围绕Hibernate展开,展示了调用函数查找索引内容字段的代码,给出了HQL语句及执行的SQL。详细解析了类之间的关系,如Layout通过继承与ContentField构成一对多关系,ContentField与ContentFieldValue构成双向一对多关系,还介绍了相关映射描述。
 read-atleap-hibernate部分分析2-Field类


ØField

ª调用函数

 List fields = contentFieldManager.findIndexedContentFieldByLayoutDefinition(identifier,

layout.getDefinition(), locale);

 

ª HQL

 String hql = new StringBuffer("select distinct field from Layout layout inner join

layout.contentFields field inner join field.contentFieldValues value ")

                .append("where ")

                .append("field.identifier like '")

                .append(StringUtil.dbEncode(identifier)).append("[%]' ")

                .append("and layout.definition = ? ")

                .append("and (value.contentLocale.identifier = ? or        

value.contentLocale.defaultInstance = 'T')")

                .toString();

 

ª执行的SQL

Hibernate: select distinct contentfie1_.id as id, contentfie1_.version as versio

n, contentfie1_.identifier as identifier, contentfie1_.localizable_id as localiz

a4_, contentfie1_.type as type, contentfie1_.internal as internal from layout la

yout0_ inner join localizable layout0__1_ on layout0_.localizable_id=layout0__1_

.id inner join field contentfie1_ on layout0_.localizable_id=contentfie1_.locali

zable_id inner join field_value contentfie2_ on contentfie1_.id=contentfie2_.fie

ld_id, locale contentloc3_ where (contentfie1_.identifier like 'body[%]' )and(la

yout0_.definition=? )and((contentfie2_.locale_identifier=? )or(contentloc3_.defa

ult_instance='T'  and contentfie2_.locale_identifier=contentloc3_.identifier))

 

Ü1select distinct field from Layout layout

Layout类中并没有声明contentFields属性,但是Layout继承于Localizable,所以Layout继承了LocalizablecontentFields属性和存取方法,所以LayoutContentField也构成了“一对多关系”(通过继承来实现“一对多关系”)

 

Ü LocalizablecontentFields构成了“一对多的关系”

contentFieldsLocalizable.hbm.xml中的映射描述,

        <bag

            name="contentFields"

            lazy="true"

            inverse="true"

            cascade="delete"

        >

              <key

                  column="localizable_id"

              >

              </key>

              <one-to-many

                  class="com.blandware.atleap.model.core.ContentField"

              />

        </bag>

 

Ü Localizable类中的contentFields属性声明

protected List contentFields = new ArrayList();

 

Ü2

select distinct field from Layout layout inner join layout.contentFields field inner join field.contentFieldValues value

 

Ü ContentField又和ContentFieldValue构成了双向“一对多关系”,所以就会有了以上的

       HQL语句。

 

ÜContentField.hbm.xmlContentFieldValue“一对多关系”映射

        <bag

            name="contentFieldValues"

            lazy="true"

            inverse="true"

            cascade="delete"

        >

              <key

                  column="field_id"

              >

              </key>

              <one-to-many

                  class="com.blandware.atleap.model.core.ContentFieldValue"

              />

        </bag>

 

Ü3

and (value.contentLocale.identifier = ? or value.contentLocale.defaultInstance = 'T')

ÜContentFieldValue.hbm.xml中的ContentLocale“多对一”映射

        <many-to-one

            name="contentLocale"

            class="com.blandware.atleap.model.core.ContentLocale"

            cascade="none"

            outer-join="false"

            update="true"

            insert="true"

            access="property"

            column="locale_identifier"

            not-null="false"

        />

 

ªfield表结构

mysql> select * from field;

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

| id  | version | identifier  | localizable_id | type | internal |

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

|   0 |       0 | title       |              2 |    0 | T

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值