1

我为每个插件 portlet 使用 liferay 服务构建器 jar。所以当我必须插入一条新记录时。我正在使用下面的代码来插入记录。

XXX xxx = XXXLocalServiceUtil.createXXX(CounterLocalServiceUtil.increment(XXX.class.getName()));
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);

每个表都有一个自动递增的主键。但是counter local service util会计算自己的counter值。我需要每个插入的主键值。但在这种情况下,如果第一条记录是插入的。1 将被插入记录,但 liferay 计数器将根据部署返回 101 或 201。

这工作正常

XXX xxx = new XXXImpl();
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);

我得到了按照休眠模式的确切密钥。但我不能用这个。因为我使用的是服务构建器的 jar 文件并且没有 Impl 类。

服务生成器 xml 文件:

<entity name="XXX" local-service="true"
remote-service="false">
<column name="id" type="long" id-type="increment" primary="true"></column> 
<column name="value" type="String" ></column></entity>

另一种解释方法:

嗨,我正在为我的所有插件 portlet 使用服务构建器。而且我有具有自动增量主键的自定义表。到目前为止,我知道有这些方法可以将记录插入表中。

XXX xxx = XXXLocalServiceUtil.createXXX(0); 
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);

或者

XXX xxx = XXXLocalServiceUtil.createXXX(CounterLocalServiceUtil.increment()); // Global increment
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);

或者

XXX xxx = XXXLocalServiceUtil.createXXX(CounterLocalServiceUtil.increment(XXX.class.getName())); // Increment table specific
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);

首先,如果我想获得主键值,我得到 0,第二个长值,第三个增量值 wrt 表名。我正在使用那个。现在,如果我重新部署服务或 portlet 计数器值将增加 101,201,... 这可以通过设置 counter.increment.xxx.Class=1 或 counter.increment=1 来处理。

但我只想从“xxx”获取数据库表的增量值。所以有任何方法可以做到这一点。像这样:

XXX xxx = new XXXImpl();
xxx.setValue(value);
XXXLocalServiceUtil.addXXX(xxx);

在这里我可以从数据库表中获取我想要的值。

4

1 回答 1

1

找到了解决方案:

XXX xxx = XXXLocalServiceUtil.createXXX(0); 
xxx.setValue(value);
xxx = XXXLocalServiceUtil.addXXX(xxx);

现在我们在 xxx 中有了增量值。我们只需要重新分配对象。

于 2017-07-27T05:29:35.253 回答