【问题标题】:Ignored default value in Lucee OrmLucee Orm 中忽略的默认值
【发布时间】:2015-12-27 18:19:04
【问题描述】:

我用这个属性设置了我的持久化组件:

<cfproperty name="active" ormType="timestamp" notnull="true" dbDefault="now()" />

现在,如果我通过不指定 created_at 值来保存实体,则会收到错误消息:not-null property references a null or transient value: User.active

如何在创建实体时跳过指定所有列?

谢谢!

【问题讨论】:

  • 该错误似乎与名为 active 而不是 created_at 的属性有关。您能否发布更多代码以阐明您要执行的操作?
  • 谢谢,你说得对,这是代码&lt;cfproperty name="active" ormtype="boolean" notnull="true" dbdefault="false" /&gt;,当添加我做的实体u = entityNew('user'); u.setEmail('mymail@domanin.com'); entitySave(u);时,Db结构(Postgresql)似乎没问题,ALTER TABLE users ADD COLUMN active boolean; ALTER TABLE users ALTER COLUMN active SET NOT NULL; ALTER TABLE users ALTER COLUMN active SET DEFAULT false;
  • 好的,更有意义。您是否尝试过使用default=false 而不是dbdefault,或者除了dbdefault。这应该确保在保存实体时属性不具有空值。
  • 另外,为了后代,最好能编辑您的问题以显示您所询问的属性(即active 而不是created_at)。

标签: orm cfml lucee


【解决方案1】:

我不会在数据库架构中设置默认值,而是使用default 属性在您的实体属性中定义它们以避免空值。

但是,请记住,只有简单的非动态值(例如固定字符串和数字)才能定义为默认值。如果您需要定义一个复杂值(如数组)或动态值(如Now()),则需要在实体的init() 方法中进行设置。

component name="user" accessors=true persistent=true{

 property name="active" ormtype="boolean" default=false;
 property name="created_at" ormtype="timestamp";

 function init(){
  variables.created_at=Now();
  return this;
 }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2020-04-06
    相关资源
    最近更新 更多