這篇文章主要介紹如何通過model hint 來修改liferay builder service生成數據庫表中默認字段的長度。
1.什么是Model Hints?
它是對liferay builder service生成的model類的基本提示.
?
2. 它在什么地方被定義的?
portlet-model-hints.xml
?
3. 文件位置?
/docroot/WEB-INF/src/META-INF
?
?
4. 為什么被稱為Model Hints?
Liferay把它命名為Model Hints,因為Model Hints表明了實體呈現給用戶的方式,同時也指定了實體的字段在數據庫中占的內存大小。
?
5. 我能在portal源碼中找到關于model hints的更多詳細信息嗎?
能,在Liferay 7.0 ga4中, model hints的文件位于liferay-ce-portal-7.0-ga4/tomcat-8.0.32/webapps/ROOT/WEB-INF/lib/portal-impl/META-INF/portal-model-hints.xml
?
6. Model Hints的最佳用處是什么?
用來定義存儲在數據庫中實體的字段的size.
?
現在讓我們來看一下實例(改變service builder在數據庫生成的表的字段長度)
1. service.xml
<?xml version="1.0"?> <!DOCTYPE service-builder PUBLIC "-//Liferay//DTD Service Builder 7.0.0//EN" "http://www.liferay.com/dtd/liferay-service-builder_7_0_0.dtd"><service-builder package-path="my.test.sb"><namespace>FOO</namespace><!--<entity data-source="sampleDataSource" local-service="true" name="Foo" remote-service="false" session-factory="sampleSessionFactory" table="foo" tx-manager="sampleTransactionManager uuid="true"">--><entity local-service="true" name="Foo" remote-service="true" uuid="true"><!-- PK fields --><column name="fooId" primary="true" type="long" /><!-- Group instance --><column name="groupId" type="long" /><!-- Audit fields --><column name="companyId" type="long" /><column name="userId" type="long" /><column name="userName" type="String" /><column name="createDate" type="Date" /><column name="modifiedDate" type="Date" /><!-- Other fields --><column name="field1" type="String" /><column name="field2" type="boolean" /><column name="field3" type="int" /><column name="field4" type="Date" /><column name="field5" type="String" /><!-- Order --><order by="asc"><order-column name="field1" /></order><!-- Finder methods --><finder name="Field2" return-type="Collection"><finder-column name="field2" /></finder><!-- References --><reference entity="AssetEntry" package-path="com.liferay.portlet.asset" /><reference entity="AssetTag" package-path="com.liferay.portlet.asset" /></entity> </service-builder>
2.生成的portlet-model-hints.xml
<?xml version="1.0"?><model-hints><model name="my.test.sb.model.Foo"><field name="uuid" type="String" /><field name="fooId" type="long" /><field name="groupId" type="long" /><field name="companyId" type="long" /><field name="userId" type="long" /><field name="userName" type="String" /><field name="createDate" type="Date" /><field name="modifiedDate" type="Date" /><field name="field1" type="String" /><field name="field2" type="boolean" /><field name="field3" type="int" /><field name="field4" type="Date" /><field name="field5" type="String" /></model> </model-hints>
3. 在改變model hints之前數據庫中字段的長度
只是userName的長度是75
4. 現在改變portlet-model-hints.xml文件,內容如下。把useName的長度改為100
<?xml version="1.0"?><model-hints><model name="my.test.sb.model.Foo"><field name="uuid" type="String" /><field name="fooId" type="long" /><field name="groupId" type="long" /><field name="companyId" type="long" /><field name="userId" type="long" /><field name="userName" type="String"><hint name="max-length">100</hint></field><field name="createDate" type="Date" /><field name="modifiedDate" type="Date" /><field name="field1" type="String" /><field name="field2" type="boolean" /><field name="field3" type="int" /><field name="field4" type="Date" /><field name="field5" type="String" /></model> </model-hints>
5. 運行cleanServiceBuilderTask(參照之前寫的清理service builder產生的table文)之后數據庫如下圖所示,userName的長度變成了100.
然后大功告成,更多詳細信息http://proliferay.com/liferay-model-hints/
https://dev.liferay.com/zh/develop/tutorials/-/knowledge_base/6-2/customizing-model-entities-with-model-hints#related-topics
?