property
<property>元素为类定义了一个持久化的,JavaBean风格的属性。
<propertyname="propertyName"column="column_name"type="typename"update="true|false"insert="true|false"formula="arbitrary SQL expression"access="field|property|ClassName"lazy="true|false"unique="true|false"not-null="true|false"optimistic-lock="true|false"generated="never|insert|always"node="element-name|@attribute-name|element/@attribute|."index="index_name"unique_key="unique_key_id"length="L"precision="P"scale="S" />
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
typename可以是如下几种:
-
Hibernate基本类型名(比如:
integer, string, character,date, timestamp, float, binary, serializable, object, blob
)。 -
一个Java类的名字,这个类属于一种默认基础类型 (比如:
int, float,char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob
)。 -
一个可以序列化的Java类的名字。
-
一个自定义类型的类的名字。(比如:
com.illflow.type.MyCustomType
)。
如果你没有指定类型,Hibernarte会使用反射来得到这个名字的属性,以此来猜测正确的Hibernate类型。 Hibernate会按照规则2,3,4的顺序对属性读取器(getter方法)的返回类进行解释。然而,这还不够。 在某些情况下你仍然需要type
属性。(比如,为了区别Hibernate.DATE
和Hibernate.TIMESTAMP
,或者为了指定一个自定义类型。)
access
属性用来让你控制Hibernate如何在运行时访问属性。在默认情况下, Hibernate会使用属性的get/set方法对(pair)。如果你指明access="field"
, Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。你也可以指定你自己的策略, 这就需要你自己实现org.hibernate.property.PropertyAccessor
接口, 再在access中设置你自定义策略类的名字。
衍生属性(derive propertie)是一个特别强大的特征。这些属性应该定义为只读,属性值在装载时计算生成。 你用一个SQL表达式生成计算的结果,它会在这个实例转载时翻译成一个SQL查询的SELECT
子查询语句。
<property name="totalPrice"formula="( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product pWHERE li.productId = p.productIdAND li.customerId = customerIdAND li.orderNumber = orderNumber )"/>
注意,你可以使用实体自己的表,而不用为这个特别的列定义别名( 上面例子中的customerId
)。同时注意,如果你不喜欢使用属性, 你可以使用嵌套的<formula>
映射元素。
property
<property>元素为类定义了一个持久化的,JavaBean风格的属性。
<propertyname="propertyName"column="column_name"type="typename"update="true|false"insert="true|false"formula="arbitrary SQL expression"access="field|property|ClassName"lazy="true|false"unique="true|false"not-null="true|false"optimistic-lock="true|false"generated="never|insert|always"node="element-name|@attribute-name|element/@attribute|."index="index_name"unique_key="unique_key_id"length="L"precision="P"scale="S" />
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
typename可以是如下几种:
-
Hibernate基本类型名(比如:
integer, string, character,date, timestamp, float, binary, serializable, object, blob
)。 -
一个Java类的名字,这个类属于一种默认基础类型 (比如:
int, float,char, java.lang.String, java.util.Date, java.lang.Integer, java.sql.Clob
)。 -
一个可以序列化的Java类的名字。
-
一个自定义类型的类的名字。(比如:
com.illflow.type.MyCustomType
)。
如果你没有指定类型,Hibernarte会使用反射来得到这个名字的属性,以此来猜测正确的Hibernate类型。 Hibernate会按照规则2,3,4的顺序对属性读取器(getter方法)的返回类进行解释。然而,这还不够。 在某些情况下你仍然需要type
属性。(比如,为了区别Hibernate.DATE
和Hibernate.TIMESTAMP
,或者为了指定一个自定义类型。)
access
属性用来让你控制Hibernate如何在运行时访问属性。在默认情况下, Hibernate会使用属性的get/set方法对(pair)。如果你指明access="field"
, Hibernate会忽略get/set方法对,直接使用反射来访问成员变量。你也可以指定你自己的策略, 这就需要你自己实现org.hibernate.property.PropertyAccessor
接口, 再在access中设置你自定义策略类的名字。
衍生属性(derive propertie)是一个特别强大的特征。这些属性应该定义为只读,属性值在装载时计算生成。 你用一个SQL表达式生成计算的结果,它会在这个实例转载时翻译成一个SQL查询的SELECT
子查询语句。
<property name="totalPrice"formula="( SELECT SUM (li.quantity*p.price) FROM LineItem li, Product pWHERE li.productId = p.productIdAND li.customerId = customerIdAND li.orderNumber = orderNumber )"/>
注意,你可以使用实体自己的表,而不用为这个特别的列定义别名( 上面例子中的customerId
)。同时注意,如果你不喜欢使用属性, 你可以使用嵌套的<formula>
映射元素。