我为Liferay创建了一个JSR-268 portlet,它使用服务与数据库进行交互。我可以在没有问题或错误的情况下部署portlet,但是不会创建服务定义的表!
测试portlet时,我没有收到“table not found”错误。我完全没有错误!该表不在数据库中。我在互联网上发现其他东西说我应该使用Liferay Service Builder创建的生成的“create.sql”文件,但我没有在任何地方看到该文件。
有人能帮助我吗?
答案 0 :(得分:10)
是否从未创建过表格?我手动删除表时遇到了类似的问题。我认为在再次部署portlet时会再次创建它们,但它没有发生。
在研究了源代码之后,我发现Liferay在表servicecomponent
中存储了有关portlet的信息,并在META-INF/tables.sql
中执行(伪)SQL之前检查了两件事:
build.number
中的service.properties
必须高于servicecomponent
中存储的tables.sql
,servicecomponent
必须与tables.sql
中存储的内容不同。只有这样才会执行servicecomponent
。
实现这一目标的一种简单方法是删除{{1}}寻址portlet的所有条目。
答案 1 :(得分:2)
尝试删除servicecomponent表中的条目。并重新部署您的portlet。
delete FROM servicecomponent where buildNamespace="<your table namespace>"
答案 2 :(得分:1)
我遇到了同样的问题,以下解决方案对我有用。
<强>步骤强>
然后构建服务和部署将在 service.xml 文件中创建自定义表格。
答案 3 :(得分:0)
如果您在Service.xml中的Liferay架构中定义新实体时在Liferay 6.2中使用serviceBuilder,那么任何Portlet第一次尝试访问该表时,如果它已经创建,它将被创建。不存在。
当您使用不同的架构时会出现几个问题,因为有时Liferay不会自动创建表。然后你需要创建Creation SQL语句并手动创建它,然后通过LocalServiceUtil访问它。