这篇文章主要介绍如何通过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