我为每个插件 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);
在这里我可以从数据库表中获取我想要的值。