首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Liferay错误自动增量

问Liferay错误自动增量
EN

Stack Overflow用户
提问于 2019-01-21 08:49:47
回答 1查看 493关注 0票数 0

我有六点二。

我有一个使用MySql数据库的portlet。

我有一张persons桌

代码语言:javascript
复制
Id | Name | Info

Id是自动增量的,因此在service.xml中有:

代码语言:javascript
复制
<column name="Id" type="long" primary="true" id-type="increment" />

我有一台开发机器。mysql表persons中已有100行可用。我通过一个sql查询在表persons中输入了信息,并且使用了从300到600之间的id。我使用了Liferay后端工具来更新数据库缓存。当我使用应用程序(portlet)输入新行时,id为601。这是正确的。

我有一台生产机器,除了清空数据库缓存之外,我还执行了相同的操作,因为出于某种原因,我无法这样做。

当我插入一个新行时,带有portlet的id是101,而不是601。

当我插入一个新行时,我什么时候会出现** id ** 199?

我能做些什么来解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2019-01-21 18:03:24

如果您看到“数百”上的ids,您可能只看到Liferay实体的默认增量值:

来自portal.properties

代码语言:javascript
复制
# Set the number of increments between database updates to the Counter table. 
# this value to a higher number for better performance.
# Defaults:

 counter.increment=100

您可以通过创建101个对象(其中对象#101 wou获得700个id)或关闭用于创建#101对象并重新启动的服务器,然后创建一个新对象来测试此行为: 100的粒度意味着将分配下一个100个id,下一个将选择#700。

当我插入一个新行时,我什么时候会出现** id ** 199?

很容易发现..。

我能做些什么来解决这个问题?

验证是否存在问题。也许没有必要解决任何问题

我有一台开发机器。mysql表persons中已经有100行可用。我通过sql查询在表persons中输入了信息,并且使用了从300到600开始的id。

如果您不依赖于自动id构造,那么这样做是一个非常糟糕的主意。Liferay的Service不能依赖数据库中的id生成,因为每个数据库在这方面的行为略有不同。

Liferay的id生成--当它遵循我前面描述的机制--是通过CounterLocalService完成的。您可以调用此服务来提前实体的Ids (使用实体的类名作为密钥),以防您对数据库进行手动操作。

您不应该直接更改数据库上的任何Liferay实体。如果您有自己的servicebuilder生成的实体,您可能有一个要点,但我的建议是选择一种编写/访问数据的方法并坚持使用它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54286215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档