waterline-model.create – 主键

waterline-model.create - primaryKey

我有以下带有主键 ID 的模型:

attributes: {

 id: {

   type: 'integer',

   autoIncrement: true,

   primaryKey: true,

   unique: true

 },

  name: {

   type: 'string',

   unique: true,

   required: true

 },

}var model = {

  id: undefined,

  name: 'name',

};attributes: {

 createdAt: { type: 'number', autoCreatedAt: true, },

 updatedAt: { type: 'number', autoUpdatedAt: true, },

 id: { type: 'number', autoIncrement: true, },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  id: false,

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}Will set the primary key of the record. This should be used when autoPK is set to false.



attributes: {

 uuid: {

  type: 'string',

  primaryKey: true,

  required: true

 }

}

我正在创建如下模型:

attributes: {

 id: {

   type: 'integer',

   autoIncrement: true,

   primaryKey: true,

   unique: true

 },

  name: {

   type: 'string',

   unique: true,

   required: true

 },

}var model = {

  id: undefined,

  name: 'name',

};attributes: {

 createdAt: { type: 'number', autoCreatedAt: true, },

 updatedAt: { type: 'number', autoUpdatedAt: true, },

 id: { type: 'number', autoIncrement: true, },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  id: false,

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}Will set the primary key of the record. This should be used when autoPK is set to false.



attributes: {

 uuid: {

  type: 'string',

  primaryKey: true,

  required: true

 }

}

waterlinemodel.create(model).exec(function(error, result) {});

但它会引发以下错误:

错误 (E_UNKNOWN) 遇到意外错误] 详细信息:错误:列 "id" 中的空值违反非空约束

因为,\\'id\\'是主键,水线不应该看\\'id\\'属性的值是什么。

如何解决这个错误?我不想删除\\'id\\',因为我已经为模型创建了值对象,它包含模型的所有属性。我正在根据需要设置值对象属性。我不需要为创建设置 id 属性。


我遇到了完全相同的问题,尤其是配置为使用 postgresql 的模型。将其设置为磁盘或内存时,会创建资源,但使用 postgresql 时不会创建资源并出现非空约束错误。

无论我是否设置了 autoPK: true,都不会设置 id。即使使用 autoPK:false 在模型上设置 id 属性也不起作用。


2019答??案

jaumard\\ 的文档链接现在出现 404 错误,但我认为自 2015 年以来情况可能发生了变化...

Sails.js 具有在 config/models.js 中定义的基本属性,在新生成的项目中看起来像这样:

attributes: {

 id: {

   type: 'integer',

   autoIncrement: true,

   primaryKey: true,

   unique: true

 },

  name: {

   type: 'string',

   unique: true,

   required: true

 },

}var model = {

  id: undefined,

  name: 'name',

};attributes: {

 createdAt: { type: 'number', autoCreatedAt: true, },

 updatedAt: { type: 'number', autoUpdatedAt: true, },

 id: { type: 'number', autoIncrement: true, },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  id: false,

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}Will set the primary key of the record. This should be used when autoPK is set to false.



attributes: {

 uuid: {

  type: 'string',

  primaryKey: true,

  required: true

 }

}

另外,默认的 primaryKey 设置为 id。如果你想覆盖它,你需要在你的完整模型定义中明确指定你的新 primaryKey 。例如,如果您想让 name 成为您的 primaryKey,您可以使用如下内容:

attributes: {

 id: {

   type: 'integer',

   autoIncrement: true,

   primaryKey: true,

   unique: true

 },

  name: {

   type: 'string',

   unique: true,

   required: true

 },

}var model = {

  id: undefined,

  name: 'name',

};attributes: {

 createdAt: { type: 'number', autoCreatedAt: true, },

 updatedAt: { type: 'number', autoUpdatedAt: true, },

 id: { type: 'number', autoIncrement: true, },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  id: false,

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}Will set the primary key of the record. This should be used when autoPK is set to false.



attributes: {

 uuid: {

  type: 'string',

  primaryKey: true,

  required: true

 }

}

请注意,我将 primaryKey 放在 attributes 之外。这个很重要。您的 primaryKey 还需要 uniquerequired 约束。

此外,如果您想禁用 id 列以便它不会提交到您的数据库,您必须将 id 替换为值 false -- 但是您必须定义一个不同的 primaryKey 否则您启动应用程序时会出错。问题中显示的错误可能与模型将 id 明确定义为 undefined 的事实直接相关。如何禁用 id 的示例如下所示:

attributes: {

 id: {

   type: 'integer',

   autoIncrement: true,

   primaryKey: true,

   unique: true

 },

  name: {

   type: 'string',

   unique: true,

   required: true

 },

}var model = {

  id: undefined,

  name: 'name',

};attributes: {

 createdAt: { type: 'number', autoCreatedAt: true, },

 updatedAt: { type: 'number', autoUpdatedAt: true, },

 id: { type: 'number', autoIncrement: true, },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  id: false,

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}Will set the primary key of the record. This should be used when autoPK is set to false.



attributes: {

 uuid: {

  type: 'string',

  primaryKey: true,

  required: true

 }

}

正如文档所说:

attributes: {

 id: {

   type: 'integer',

   autoIncrement: true,

   primaryKey: true,

   unique: true

 },

  name: {

   type: 'string',

   unique: true,

   required: true

 },

}var model = {

  id: undefined,

  name: 'name',

};attributes: {

 createdAt: { type: 'number', autoCreatedAt: true, },

 updatedAt: { type: 'number', autoUpdatedAt: true, },

 id: { type: 'number', autoIncrement: true, },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}module.exports = {

 primaryKey: 'name',

 attributes: {

  id: false,

  name: {

   type: 'string',

   unique: true,

   required: true

  },

  // ...

 },

}Will set the primary key of the record. This should be used when autoPK is set to false.



attributes: {

 uuid: {

  type: 'string',

  primaryKey: true,

  required: true

 }

}

你需要在你的模型上设置 autoPK : false

文档链接:https://github.com/balderdashy/waterline-docs/blob/master/models.md#primarykey


相关推荐

  • Spring部署设置openshift

    Springdeploymentsettingsopenshift我有一个问题让我抓狂了三天。我根据OpenShift帐户上的教程部署了spring-eap6-quickstart代码。我已配置调试选项,并且已将Eclipse工作区与OpehShift服务器同步-服务器上的一切工作正常,但在Eclipse中出现无法消除的错误。我有这个错误:cvc-complex-type.2.4.a:Invali…
    2025-04-161
  • 检查Java中正则表达式中模式的第n次出现

    CheckfornthoccurrenceofpatterninregularexpressioninJava本问题已经有最佳答案,请猛点这里访问。我想使用Java正则表达式检查输入字符串中特定模式的第n次出现。你能建议怎么做吗?这应该可以工作:MatchResultfindNthOccurance(intn,Patternp,CharSequencesrc){Matcherm=p.matcher…
    2025-04-161
  • 如何让 JTable 停留在已编辑的单元格上

    HowtohaveJTablestayingontheeditedcell如果有人编辑JTable的单元格内容并按Enter,则内容会被修改并且表格选择会移动到下一行。是否可以禁止JTable在单元格编辑后转到下一行?原因是我的程序使用ListSelectionListener在单元格选择上同步了其他一些小部件,并且我不想在编辑当前单元格后选择下一行。Enter的默认绑定是名为selectNext…
    2025-04-161
  • Weblogic 12c 部署

    Weblogic12cdeploy我正在尝试将我的应用程序从Tomcat迁移到Weblogic12.2.1.3.0。我能够毫无错误地部署应用程序,但我遇到了与持久性提供程序相关的运行时错误。这是堆栈跟踪:javax.validation.ValidationException:CalltoTraversableResolver.isReachable()threwanexceptionatorg.…
    2025-04-161
  • Resteasy Content-Type 默认值

    ResteasyContent-Typedefaults我正在使用Resteasy编写一个可以返回JSON和XML的应用程序,但可以选择默认为XML。这是我的方法:@GET@Path("/content")@Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_JSON})publicStringcontentListRequestXm…
    2025-04-161
  • 代码不会停止运行,在 Java 中

    thecodedoesn'tstoprunning,inJava我正在用Java解决项目Euler中的问题10,即"Thesumoftheprimesbelow10is2+3+5+7=17.Findthesumofalltheprimesbelowtwomillion."我的代码是packageprojecteuler_1;importjava.math.BigInteger;importjava…
    2025-04-161
  • Out of memory java heap space

    Outofmemoryjavaheapspace我正在尝试将大量文件从服务器发送到多个客户端。当我尝试发送大小为700mb的文件时,它显示了"OutOfMemoryjavaheapspace"错误。我正在使用Netbeans7.1.2版本。我还在属性中尝试了VMoption。但仍然发生同样的错误。我认为阅读整个文件存在一些问题。下面的代码最多可用于300mb。请给我一些建议。提前致谢publicc…
    2025-04-161
  • Log4j 记录到共享日志文件

    Log4jLoggingtoaSharedLogFile有没有办法将log4j日志记录事件写入也被其他应用程序写入的日志文件。其他应用程序可以是非Java应用程序。有什么缺点?锁定问题?格式化?Log4j有一个SocketAppender,它将向服务发送事件,您可以自己实现或使用与Log4j捆绑的简单实现。它还支持syslogd和Windows事件日志,这对于尝试将日志输出与来自非Java应用程序…
    2025-04-161