entity init()
не должно быть обязательных аргументов, иначе EntityNew()
и другие действия CF-ORM прервутся. Возможно, вы захотите использовать Фабрику для создания сущности и применения там необходимых аргументов.
Ошибка в отношении этого ограничения была зарегистрирована в 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
в двунаправленных отношениях, обычно со стороны «один ко многим».
do NOT используйте inverse="true"
в однонаправленных отношениях! Отношения могут вообще не сохраняться!
Если вы используете MS-SQL, у вас не может быть более 1 сущности с однозначным свойством, равным Null, поскольку Null рассматривается как уникальное значение в индексе. Хорошая идея сделать столбец не нулевым. (или используйте linktable)
EntityLoad("entity", 1, true)
работает, но EntityLoadByPK("entity", 1)
чище!
EntityLoad()
, EntityLoadByPK()
и ORMExecuteQuery
с unique=true
вернет null
, если объект не найден. Используйте isNull()
для проверки перед использованием возвращаемого значения.
ORMExecuteQuery
вернет пустой массив, если сущность не найдена по умолчанию.
не забудьте использовать свойство singularname
в «один-ко-многим» / «многие-ко-многим» для более приятных на вид генерируемых функций (например, addDog(Dog dog)
против addDogs(Dog dogs)
.)
<cfdump>
загрузит все свойства отложенной загрузки. В качестве альтернативы вы можете попробовать <cfdump var="#entityToQuery([entity])#">
или установить top = 1 для эффективного сброса.
сущность, сохраненная в области действия сеанса, будет отключена с областью действия сеанса Hibernate, а свойство отложенной загрузки не будет загружено. Чтобы восстановить область сеанса гибернации, используйте entityLoadByExample()
или entitySave(entity)
.
cascade="all-delete-orphan"
обычно имеет больше смысла для отношений «один ко многим» или «многие ко многим». Hibernate устанавливает ноль, а затем удаляет, поэтому убедитесь, что столбец обнуляем. Проверьте и убедитесь, что это ваше желание поведения.
устанавливается required="true"
всякий раз, когда notnull="true"
, более читабельно для других, просматривающих CFC с помощью CFCExplorer
EntityNew('Y')
немного более эффективен, чем new com.X.Y
, если сущность должна быть сохранена позже, согласно некоторому инженеру Adobe.
отношения с унаследованной сущностью могут иногда нарушаться из-за нефиксированной ошибки Hibernate, используйте linktable
в качестве обходного пути.
structKeyColumn
не может быть PK целевого объекта.
двунаправленный «многие ко многим» не может использовать struct
При добавлении нового объекта в структуру, structKeyColumn
игнорируется, если CF сохраняет родительский объект.
Если вы обращаетесь к массиву или структуре «один ко многим / многие ко многим» напрямую, убедитесь, что соответствующий массив / структура существует перед использованием. Созданные addX () / hasX () / removeX () безопасны для использования в любое время.
в postInsert()
, сеанс спящего объекта больше не доступен, поэтому установка свойства в postInsert () будет игнорироваться без предупреждения или будет выдано исключение Session is Closed.
после загрузки сущности с помощью entityLoad()
или HQL из БД, изменения будут автоматически сохраняться, даже если EntitySave()
не вызывается.
транзакция с CF-ORM реализована таким образом, что она запускает новый сеанс и закрывается по завершении.
внутри события (то есть preLoad () / postInsert()), присваивание переменным может вызвать исключение Java для типов.Используйте JavaCast (), чтобы обойти ошибку.