一、简介:
1、entityengine屏蔽了数据库的很多访问细节,通过xml配置文件定义描述实体,实体引擎自动维护实体至数据库的所有细节.
2、支持主流数据库,
3、与ORM最大的不同在于ofbiz只有一个GenericValue对象,不想其他ORM框架,要定义各种不同类型的对象.防止产生过多的实体对象,避免产生类爆炸.
4、Ofbiz的GenericValue对象不想ORM定义的实体对象,它没有getter和setter方法,全部通过put(key,value)的形式来设置属性值.保持最大的灵活性.
二、Entityengine.xml
1、属性描述
l Transaction-factory:定义使用JTA事务处理工厂.
l Connection-factory:定义数据库连接池的工厂类
l Entity-model-reader:实体模型reader
l Entity-group-reader:实体组reader
l Entity-eca-reader:实体ECA事件reader
l Entity-data-reader:实体数据reader
l Fild-type:数据库字段到java字段的映射类型
2、datasource配置数据源,可以配置多个数据源
属性名称 |
必须 |
描述 |
Name |
Y |
数据源名称 |
Helper-class |
y |
数据源访问类型,一般为org.ofbiz.entity.datasource.GenericHelperDao.若自定义需实现org.ofbiz.entity.GenericHelper接口 |
Field-type-name |
n |
之前定义的字段类型映射 |
Schema-name |
n |
数据库中使用的Schema-name |
Check-on-start |
n |
启动时是否检查数据源,默认为true |
Add-mission-on-start |
n |
启动时添加默认的实体或属性,默认为false |
Use-forergn-keys |
n |
是否针对”one”relationships使用或创建外键,默认为true |
Use-forergn-key-indices |
n |
使用外键是否加索引,默认为true |
Use-fk-intially-defered |
n |
常用来指定是否在创建外键时启用INITIALLY DEFERRED 可用选项,该选项多数数据库支持,但非所有数据库支持,当启用该特性时,外键直到事务提交时才进行检测,否则外键会在事务提交之前进行检测,默认为true |
Join-style |
n |
指定在进行试图实体操作时表连接语法,许多数据采用ANSI |
Use-binary-type-for-blob |
N |
blob数据是否使用,默认为true |
Inline-jdbc |
Y |
jdbc的配置连接 |
三、实体类型及定义
1、标准实体Entiey:实体引擎中的模型基本单元,一个实体唯一对应数据库中的一个表
entity属性
名称 |
必须 |
描述 |
Entity-Name |
y |
实体名称 |
Table-name |
n |
实体对应表名 |
Package-name |
y |
实体对应包名 |
Depentent-on |
n |
实体依赖的父实体(用于表示层级) |
Enable-lock |
n |
是否启用乐观锁,默认为false |
No-auto-stamp |
n |
是否不自动创建时间戳,若这是为true,不会创建lastUpdateStamp,lastUpdatedTxStamp,createdStamp,createdTxStamp这四个字段,默认为false |
Nevel-cache |
n |
是否从不启用实体缓存,默认为false |
Title |
n |
标题 |
Copyright |
n |
版权 |
Author |
n |
作者 |
Version |
n |
版本 |
entity子元素
名称 |
出现次数 |
描述 |
Description |
0/1次 |
实体描述信息 |
Field |
1/多次 |
用于定义实体的属性 |
Prim-key |
0/多次 |
定义哪些field为主键 |
Relation |
0/多次 |
定义实体之间的关系 |
field属性
名称 |
必须 |
描述 |
Name |
Y |
对应java代码中的属性名称 |
Col-name |
N |
与之对应的列名 |
Type |
Y |
属性类型 |
field子元素
元素名称 |
出现次数 |
描述 |
Validate |
0/多次 |
属于验证调用方法的名称,仅用于webtools中的实体数据的维护 |
Prim-key属性
属性名称 |
必须 |
描述 |
Field |
Y |
作为主键的名称 |
relation属性
属性名称 |
必须 |
描述 |
Type |
y |
指定实体类型,包括单边关系的基础和是否创建对应的外键,必须是”one”,”one-nofk”,”many” |
Title |
n |
关联的名称 |
Rel-entity-name |
y |
关联的实体名称 |
Fk-name |
n |
ofbiz中会根据关系名称自动创建外键,但不推荐.建议自己命名外键名称.原因:1、多数数据库对外键和索引的名称最大字符数有限制;2、多数数据库要求外键名称必须在整个数据库中是唯一的 |
relation子元素
元素名称 |
出现次数 |
描述 |
Key-map |
1/多次 |
用于指定当前实体的的属性和关联实体的属性之间的对应关系。该元素有两个属性,field-name和rel-field-name分别用于指定当前实体的属性名称和与之关联的实体的属性名称. |
2、视图实体View-Entity:由不同的实体标准单元通过关联得到的虚拟实体,类似于数据库中的视图。
entity属性
名称 |
必须 |
描述 |
Entity-Name |
y |
实体名称 |
Table-name |
n |
实体对应表名 |
Package-name |
y |
实体对应包名 |
Depentent-on |
n |
实体依赖的父实体(用于表示层级) |
Nevel-cache |
n |
是否从不启用实体缓存,默认为false |
Title |
n |
标题 |
Copyright |
n |
版权 |
Author |
n |
作者 |
Version |
n |
版本 |
entity子元素
名称 |
出现次数 |
描述 |
description |
0/1 |
实体描述 |
Member-entity |
1/多次 |
声明哪些实体是视图的组成不错 |
alias |
1/多次 |
声明成员实体的属性别名,用作视图的属性 |
Member-entity属性
属性名称 |
必须 |
描述 |
Entity-alias |
y |
成员实体的别名,唯一 |
Entity-name |
Y |
成员实体对应的实体定义名称 |
alias属性
属性名称 |
必须 |
描述 |
Entity-alias |
y |
成员实体的实体别名 |
Name |
y |
属性别名名称 |
Field |
n |
成员实体的属性名称 |
Prim-key |
n |
指定该alias是否是视图主键的组成部分 |
Group-by |
n |
指定该别名属性是否使用结果集分组,默认为false |
Function |
n |
指定一个函数对该alias属性计算汇总相关的信息,要结合group-by一起使用 |
View-link属性
属性名称 |
必须 |
描述 |
Entity-alias |
y |
连接来源方的实体别名 |
Rel-entity-alias |
y |
连接目标方的实体别名 |
Rel-optional |
n |
关联实体的连接方式,为true时为外连接,false为内连接,默认为false |
View-link子元素
元素名称 |
必须 |
描述 |
Key-map |
1/多次 |
用于指定当前实体的的属性和关联实体的属性之间的对应关系。该元素有两个属性,field-name和rel-field-name分别用于指定当前实体的属性名称和与之关联的实体的属性名称. |
relation属性
属性名称 |
必须 |
描述 |
Type |
y |
指定关系类型,包括单边关系的基数和是否创建对应的外键,必须是”one”,”one-nofk”,”many” |
Title |
n |
关系的名称 |
Rel-entity-name |
y |
关联实体的名称 |
Fk-name |
n |
ofbiz中会根据关系名称自动创建外键,但不推荐.建议自己命名外键名称.原因:1、多数数据库对外键和索引的名称最大字符数有限制;2、多数数据库要求外键名称必须在整个数据库中是唯一的 |
3、扩展实体Extend-Entity:通过扩展实体可以继承并扩展已经存在的实体。
和entity的配置相同,只是名称为Extend-Entity
动态实体DynamicViewEntity:在程序中手动创建的实体,一般用于查询。