gpt4 book ai didi

orm - 在使用 CF-ORM 的 ColdFusion 9 中需要注意的事项

转载 作者:行者123 更新时间:2023-12-01 22:50:03 25 4
gpt4 key购买 nike

您在带有 CF-ORM (Hibernate) 的 ColdFusion 9 中观察到哪些应该注意的事情?

最佳答案

  • 实体init()方法不能有必需的参数,否则 EntityNew()和其他 CF-ORM 操作将中断。您可能希望使用工厂来创建实体,并在那里强制执行所需的参数。

    A bug regarding this limitation has been filed in the Adobe Bugbase.
  • ORMReload()ormsettings.dbcreate = "drop create"可能不会为您删除所有表。 CF9 Cumulative Hot Fix 1稍微改进了这一点,但您可能希望自己删除数据库中的表。
  • type="date" (默认使用 ormtype="date" ),只会存储日期而不是时间。如果您还想保留时间,请使用 ormtype="timestamp"
  • type="string"将默认为 varchar(255)
  • type="numeric"将默认为 float ,不是 int .如果需要,请使用 ormtype="int"。
  • 如果 fieldtype="id"并且生成器设置为某个生成器,ormtype 将默认为 int .
  • type="string" length="10"将使用 varchar(10) ,不是 char(10)
  • ormtype="char" length="10"将使用 char(1)仍然。使用 sqltype="char(10)"如果你真的需要。
  • type="boolean"使用 tinyint默认情况下,使用 sqltype="bit"如果你需要。
  • 应该使用 inverse=true在双向关系中,通常在“一对多”方面。
  • 不是 使用 inverse="true"单向关系!这种关系可能根本不会持久!
  • 如果您使用 MS-SQL,则不能有超过 1 个一对一属性设置为 Null 的实体,因为 Null 被视为索引中的唯一值。使列不为空的好主意。 (或使用链接表)
  • EntityLoad("entity", 1, true)有效,但 EntityLoadByPK("entity", 1)更干净!
  • EntityLoad() , EntityLoadByPK() , 和 ORMExecuteQueryunique=true , 将返回 null如果未找到实体。使用 isNull()在使用返回值之前进行检查。
  • ORMExecuteQuery如果默认找不到实体,将返回空数组。
  • 不要忘记使用 singularname “一对多”/“多对多”中的属性用于更好看的生成函数(例如 addDog(Dog dog) vs addDogs(Dog dogs) 。)
  • <cfdump>将加载所有延迟加载属性。或者你可以试试 <cfdump var="#entityToQuery([entity])#">或设置 top=1 以有效地转储。
  • 存储在 Session 范围内的实体将与其 Hibernate session 范围断开连接,并且不会加载延迟加载属性。要恢复休眠 session 范围,请使用 entityLoadByExample()entitySave(entity) .
  • cascade="all-delete-orphan"通常对“一对多”或“多对多”关系更有意义。 Hibernate 设置 null 然后删除,因此请确保该列可以为 null。测试一下,看看这是否是你的欲望行为。
  • 套装required="true"每当 notnull="true" ,对于使用 CFCExplorer 浏览 CFC 的其他人来说更具可读性
  • EntityNew('Y')new com.X.Y 稍有效率如果根据某些 Adob​​e 工程师的说法,该实体将在以后保留。
  • 由于未修复的 Hibernate 错误,与继承实体的关系有时可能会中断,请使用 linktable作为解决方法。
  • structKeyColumn不能是目标实体的PK。
  • 双向多对多不能使用结构
  • 向结构中添加新实体时,structKeyColumn当 CF 保留父实体时被忽略。
  • 如果直接访问一对多/多对多数组或结构体,请在使用前确保对应的数组/结构体存在。生成的 addX()/hasX()/removeX() 可以随时安全使用。
  • postInsert() ,实体休眠 session 不再可用,因此在 postInsert() 设置属性将被静默忽略,或者将抛出 Session is Closed 异常。
  • 实体加载后 entityLoad()或来自 DB 的 HQL,即使 EntitySave(),更改也会自动持久化。不叫。
  • CF-ORM 事务的实现方式是启动一个新 session 并在完成后关闭。
  • 在事件内部(即 preLoad()/postInsert()),分配给变量可能会抛出关于类型的 Java 异常。使用 JavaCast() 解决该错误。

  • 更新
  • CF9.0.1+:使用 <cfquery dbtype="hql"> ,更容易做cfqueryparam , 并且调试输出实际上显示了绑定(bind)的值。
  • 关于orm - 在使用 CF-ORM 的 ColdFusion 9 中需要注意的事项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2480377/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com