
Ø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))
Ü注1:“select distinct field from Layout layout”
Layout类中并没有声明contentFields属性,但是Layout继承于Localizable,所以Layout继承了Localizable的contentFields属性和存取方法,所以Layout和ContentField也构成了“一对多关系”(通过继承来实现“一对多关系”)
Ü Localizable和contentFields构成了“一对多的关系”
contentFields在Localizable.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.xml中ContentFieldValue“一对多关系”映射
<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
本文围绕Hibernate展开,展示了调用函数查找索引内容字段的代码,给出了HQL语句及执行的SQL。详细解析了类之间的关系,如Layout通过继承与ContentField构成一对多关系,ContentField与ContentFieldValue构成双向一对多关系,还介绍了相关映射描述。
2万+

被折叠的 条评论
为什么被折叠?



