Liferay:如何配置Service Builder以使用MySQL生成的主键

时间:2015-10-14 22:07:22

标签: liferay liferay-service-builder

我有一个liferay实体(日志表),它有一个由Liferay Service Builder(service.xml)自动生成的主键。 但是现在外部应用程序需要将条目添加到同一个数据库表中。

看看这个要求我只看到两个选项来实现这个目标:

  1. 如果我可以在service.xml中指定可以允许此数据库实体使用MySQL生成的主键(而不是Liferay计数器服务),那么Liferay或外部应用程序都可以添加条目而不用担心。
  2. 如果由于Service Builder限制而无法执行#1,则只有选项是使用liferay Web服务公开此实体,以便外部应用程序向此db表添加条目。

2 个答案:

答案 0 :(得分:1)

DTD Service Builder 6.2.0

您的问题的答案直接在xml文档说明中。

第一个例子

  

第二种实现生成的标识符仅在不存在时才是唯一的   其他进程是将数据插入到同一个表中。这个实现应该   不能在群集环境中使用,但它确实适用于所有受支持的环境   数据库。

示例

<column
    name="id"
    type="Integer"
    primary="true"
    id-type="increment"
/>

第二个例子

  

第三种实现使用标识列生成主键。在此实现中,为此实体生成的create table SQL将   创建一个标识列,无论何时本机自动生成主键   插入发生。此实现仅受DB2,MySQL和   MS SQL Server。

示例

<column
    name="id"
    type="Integer"
    primary="true"
    id-type="identity"
/>

很难获得的信息是如何在生成的 persistenceImpl 类中覆盖create方法。在Liferay中创建代理键时,通常使用CounterLocalService来递增。但是,当您的密钥由数据库处理时,您需要将0作为参数发送。

public SoftwareKey createSoftwareKey() {
    return softwareKeyPersistence.create(0);
}

答案 1 :(得分:0)

你的第一点不是一个好主意,主键完全由Liferay管理。

然而,你的第二点是完成你想要的正确方法,看看here