1

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

查看此要求,我看到只有两个选项可以实现此目标:

  1. 如果我可以在 service.xml 中指定可以允许该数据库实体使用 MySQL 生成的主键(而不是 Liferay 计数器服务),那么 Liferay 或外部应用程序都可以毫无顾虑地添加条目。
  2. 如果由于 Service Builder 限制而无法实现 #1,那么唯一的选择是使用 liferay Web 服务公开该实体,以便外部应用程序向该数据库表添加条目。
4

2 回答 2

2

DTD 服务生成器 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);
}
于 2017-06-09T06:23:22.400 回答
0

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

但是,您的第二点是完成您想要的正确方法,请看这里

于 2015-10-15T08:26:55.893 回答