不同的資料庫擁有不同的資料類型,就想不通的語言擁有不同的詞彙表。但就像不通語言可以等同部分,不通資料庫通常有他們之間的相同資料類型。OFBiz通過定義标準的”OFBiz資料類型“——對OFBiz來說的類型,來獲得資料庫獨立性(連接配接不同資料庫轉換的能力)。這些OFBiz資料類型的每一種,OFBiz都有一個映射到等同資料庫指定類型。這樣,OFBiz代碼隻需處理一個單一的資料類型集合——OFBiz資料類型。OFBiz 翻譯它自己的資料類型為指定資料庫的類型。
資料類型的映射在${component:entity}\fieldtype檔案夾中。支援的資料庫有:Derby、PostgreSQL, MySQL, MSSQL, Oracle, MaxDB以及許多其它類型。目錄為每個OFBiz支援的資料庫包含一個映射檔案 fieldtype<database-name>.xml(例如 fieldtypederby.xml)。每個映射檔案通過<feld-type>元素加載到 ${component:entity}\config。
下面是mysql資料庫和ofbiz資料類型的映射
<fieldtypemodel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/fieldtypemodel.xsd">
<!-- ===================== field-type-def ==================== -->
<!-- General Types -->
<field-type-def type="blob" sql-type="LONGBLOB" java-type="java.sql.Blob"/>
<field-type-def type="byte-array" sql-type="LONGBLOB" java-type="byte[]"/>
<field-type-def type="object" sql-type="LONGBLOB" java-type="Object"/>
<field-type-def type="date-time" sql-type="DATETIME" java-type="java.sql.Timestamp"/>
<field-type-def type="date" sql-type="DATE" java-type="java.sql.Date"/>
<field-type-def type="time" sql-type="TIME" java-type="java.sql.Time"/>
<field-type-def type="currency-amount" sql-type="DECIMAL(18,2)" java-type="java.math.BigDecimal"/>
<field-type-def type="currency-precise" sql-type="DECIMAL(18,3)" java-type="java.math.BigDecimal"/>
<field-type-def type="fixed-point" sql-type="DECIMAL(18,6)" java-type="java.math.BigDecimal"/>
<field-type-def type="floating-point" sql-type="DOUBLE" java-type="Double"/>
<field-type-def type="numeric" sql-type="DECIMAL(20,0)" java-type="Long"/>
<field-type-def type="id" sql-type="VARCHAR(20)" java-type="String"/>
<field-type-def type="id-long" sql-type="VARCHAR(60)" java-type="String"/>
<field-type-def type="id-vlong" sql-type="VARCHAR(250)" java-type="String"/>
<field-type-def type="indicator" sql-type="CHAR(1)" java-type="String"/>
<field-type-def type="very-short" sql-type="VARCHAR(10)" java-type="String"/>
<field-type-def type="short-varchar" sql-type="VARCHAR(60)" java-type="String"/>
<field-type-def type="long-varchar" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="very-long" sql-type="LONGTEXT" java-type="String"/>
<field-type-def type="comment" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="description" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="name" sql-type="VARCHAR(100)" java-type="String"/>
<field-type-def type="value" sql-type="VARCHAR(255)" java-type="String"/>
<!-- Specialized Types -->
<field-type-def type="credit-card-number" sql-type="VARCHAR(255)" java-type="String"/>
<field-type-def type="credit-card-date" sql-type="VARCHAR(7)" java-type="String"/>
<field-type-def type="email" sql-type="VARCHAR(320)" java-type="String"/>
<field-type-def type="url" sql-type="VARCHAR(2000)" java-type="String"/>
<field-type-def type="id-ne" sql-type="VARCHAR(20)" java-type="String"/>
<field-type-def type="id-long-ne" sql-type="VARCHAR(60)" java-type="String"/>
<field-type-def type="id-vlong-ne" sql-type="VARCHAR(250)" java-type="String"/>
<field-type-def type="tel-number" sql-type="VARCHAR(60)" java-type="String"/>
</fieldtypemodel>