ofibz中的数据库设计—实体定义

1、实体定义
<entity entity-name="MyTestEntity" package-name="com.jeyo.test" title="我的测试实体">
<field name="id" title="流水号" type="numeric"/>
<field name="sid" title="流水号" type="id-long"/>
<field name="activityStatus" title="状态" type="id-long"/>
<field name="priority" title="优先级别" type="id-long"/>
<field name="assigneeOrgId" title="处理部门" type="id"/>
<field name="assigneeOrgRoleId" title="处理组" type="id"/>
<field name="creatorId" title="创建人" type="id-ne"/>
<field name="creatorOrgId" title="创建人所属部门" type="id"/>
<field name="createDateTime" title="创建日期" type="date-time"/>
<field name="title" title="标题" type="id-ne"/>
<field name="comment" title="备注" type="very-long"/>

<prim-key field="sid"/>

<relation type="one-nofk" rel-entity-name="UserLogin">
<key-map field-name="creatorId" rel-field-name="userLoginId"/>
</relation>

<relation type="one" fk-name="FK_MY_TEST_ENT_CREAORG" title="creatorOrgId" rel-entity-name="Organization">
<key-map field-name="creatorOrgId" rel-field-name="partyId"/>
</relation>

<relation type="one" fk-name="FK_MY_TEST_ENT_ASSORG" title="assigneeOrgId" rel-entity-name="Organization">
<key-map field-name="assigneeOrgId" rel-field-name="partyId"/>
</relation>

<relation type="one" fk-name="FK_MY_TEST_ENT_PRIORITY" rel-entity-name="Enumeration">
<key-map field-name="priority" rel-field-name="enumId"/>
</relation>

<relation type="one" fk-name="FK_MY_TEST_ENT_STATUSITEM" rel-entity-name="StatusItem">
<key-map field-name="activityStatus" rel-field-name="statusId"/>
</relation>

<relation type="many" name="Assignees" fk-name="FK_MY_TEST_ENT_ASSORGROL" rel-entity-name="OrganizationMember">
<key-map field-name="assigneeOrgId" rel-field-name="organizationId"/>
<key-map field-name="assigneeOrgRoleId" rel-field-name="organizationRoleId"/>
</relation>

<relation type="many" rel-entity-name="AttachmentView" chain-delete="Y">
<key-map field-name="sid" rel-field-name="entityId"/>
</relation>

<index name="IX_MY_TEST_ENT_MSISDN" unique="false">
<index-field name="creatorId"/>
</index>
</entity>

<entity entity-name="SmsGetsent" table-name="SMS_GETSENT" package-name="com.jeyo.request.event" title="短信内容信息表">
<field name="id" col-name="SMS_ID" title="流水号" type="numeric"/>
<field name="type" col-name="TYPE" title="短信类型" type="numeric"/>
<field name="msisdn" col-name="MSISDN" title="手机号" type="code"/>
<field name="userId" col-name="USER_ID" title="用户编号" type="id"/>
<field name="content" col-name="CONTENT" title="短信内容" type="id-vlong"/>
<field name="gsTime" col-name="GS_TIME" title="发送时间" type="numeric"/>
<field name="errorCount" col-name="ERROR_COUNT" title="发送错误次数" type="numeric"/>
<field name="isDone" col-name="IS_DONE" title="是否已经接收或发送" type="numeric"/>
<field name="memo" col-name="MEMO" title="备注" type="id-vlong"/>

<prim-key field="id"/>
</entity>

2、实体组定义

<entity-group group="com.jeyo" entity="MyTestEntity"/>
<entity-group group="com.jeyo" entity="SmsGetsent"/>

3、详解
1)、实体定义的配置文件位于以下目录:applications\general(模块名)\entitydef\。
entitymodel*.xml是实体定义文件,entitygroup*.xml是实体组定义文件。


新增实体定义文件、实体组定义文件时,需要在applications\general(模块名)\ofbiz-component.xml文件中增加相应的entity-resource配置项。
新增一个实体的配置时,同时还需要增加相应的实体组配置。

2)、entity元素:表示这是一个实体
entity-name:实体名称。命名规则:每个单词的首字母大写,其余小写,建议全部使用26个字母。
table-name:对应数据库表名。建议由系统自动生成,生成规则为:实体名每个单词之间加下划线,单词全部大写或小写,最后再加下划线。
package-name:用于将同一个小模块的实体进行组织。
title:作为在web上显示的默认名称,如不设置将根据实体名自动生成英文。

3)、field元素:用于定义实体的字段
name:字段名称。
col-name:数据库字段名称,命名规则与实体名称的命名规则一致,但第一个单词要小写,不建议配置。
title:页面显示的字段名称。
type:字段的数据类型。应用的是数据类型配置文件中的类型,而非数据库实际的类型。
可用的数据类型配置文件在以下文件目录中:framework/entity/fieldtype/fieldtypemssql.xml 中可以看到确切的对应关系!
不同的数据库都有对应的数据类型配置文件,比如:
Oracle:fieldtypeoracle.xml
SqlServer:fieldtypemssql.xml
MySql:fieldtypemysql.xml
[color=red] 有-ne后缀的数据类型表示该字段在页面操作过程中是必填项。 [/color]

4)、prim-key元素:用于定义实体的主键字段,可以由多个字段组成复合主键
一般情况下,我们以id或sid之一作为主键字段。当主键字段是id或者sid时,系统会自动为其赋一个值,其中,sid字段值的结构为:【实体名】 + 【:】+ 【id值】,范例实体的sid值可能类似 MyTestEntity:1000000 这样子。
建议通过主关键字关联的实体要求设置sid,避免流水号冲突。
下一个有效的id值存储在SEQUENCE_VALUE_ITEM_表中,系统一次取10个有效值存放在内存中,用完后再取10个。

5)、relation元素:用于定义字段的关联关系,也就是说,字段的值是来自于被关联实体的被关联字段的。
type:指定关联的类型:
one:表示一对一的关联关系,数据库将创建外键,外键以引用实体为基础命名,如果同一个实体以one类型被引用一次以上,必须定义fk-name,避免外键冲突;建议全部命名fk-name,命名规则为“FK_实体名第一个单词大写+后面单词的首字母_被引用字段的第一个单词大写+其余单词的首字母”。
one-nofk:与上不同的是不建立外键。此时,fk-name不用指定。
many:表示一对多的关联关系。
fk-name:外键名称,必须全局唯一。


title:当有两个以上的字段关联到同一个实体(比如creatorOrgId和assigneeOrgId都关联到Organization实体)时,必须要为这些字段指定title属性值。

关联关系的引用规则为:【title】 + 【被关联的实体名】,比如
在List页面中,关联关系的使用类似:rowValue.creatorOrgIdOrganization.name
在View页面中,关联关系的使用类似:creatorOrgIdOrganization.name


rel-entity-name:被关联的实体名
key-map:关联字段,可定义多个字段
field-name:关联字段
rel-field-name:被关联的字段,默认为field-name。
chain-delete:是否级联删除。

6)、index元素:定义索引
name:索引的名称
unique:是否唯一
index-field:索引字段
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值