Files
alfresco-community-repo/source/java/org/alfresco/repo/domain/hibernate/Node.hbm.xml
Derek Hulley 5e9c4c279e Removed eager join to child associations after checking that performance is not hit by using proxies
Cache size adjustments to keep association (set and map) caches down to a reasonable level after memory issues found during benchmarking


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@2972 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2006-05-24 16:32:42 +00:00

326 lines
11 KiB
XML

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
'-//Hibernate/Hibernate Mapping DTD 3.0//EN'
'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'>
<hibernate-mapping>
<typedef class="org.alfresco.repo.domain.hibernate.QNameUserType" name="QName" />
<class
name="org.alfresco.repo.domain.hibernate.NodeImpl"
proxy="org.alfresco.repo.domain.Node"
table="node"
dynamic-update="false"
dynamic-insert="false"
select-before-update="false"
lazy="true"
optimistic-lock="version" >
<!-- auto-generated ID -->
<id name="id" column="id" type="long" >
<generator class="native" />
</id>
<!-- the natural ID of the node -->
<natural-id mutable="true">
<!-- forward assoc to store -->
<many-to-one
name="store"
class="org.alfresco.repo.domain.hibernate.StoreImpl"
not-null="true"
lazy="proxy"
optimistic-lock="true"
fetch="join">
<column name="protocol" not-null="true" />
<column name="identifier" not-null="true" />
</many-to-one>
<!-- the store-unique identifier -->
<property name="uuid" column="uuid" type="string" length="36" />
</natural-id>
<property name="typeQName" column="type_qname" type="QName" length="255" not-null="true" />
<!-- forward assoc to access control list (optional) -->
<many-to-one
name="accessControlList"
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"
column="acl_id"
lazy="false"
fetch="join"
unique="false"
not-null="false"
cascade="delete" />
<!-- forward assoc to properties -->
<map
name="properties"
table="node_properties"
lazy="false"
fetch="join"
sort="unsorted"
inverse="false"
optimistic-lock="true"
cascade="delete" >
<key column="node_id" not-null="true" />
<map-key column="qname" type="QName" length="200" />
<composite-element class="org.alfresco.repo.domain.PropertyValue" >
<property name="actualType" column="actual_type" type="string" length="15" not-null="true" />
<property name="multiValued" column="multi_valued" type="boolean" not-null="true" />
<property name="persistedType" column="persisted_type" type="string" length="15" not-null="true" />
<property name="booleanValue" column="boolean_value" type="boolean" />
<property name="longValue" column="long_value" type="long" />
<property name="floatValue" column="float_value" type="float" />
<property name="doubleValue" column="double_value" type="double" />
<property name="stringValue" column="string_value" type="string" length="1024"/>
<property name="serializableValue" column="serializable_value" type="serializable" length="16384"/>
</composite-element>
</map>
<!-- forward assoc to aspects -->
<set
name="aspects"
table="node_aspects"
lazy="false"
fetch="join"
inverse="false"
sort="unsorted"
optimistic-lock="true"
cascade="delete" >
<key column="node_id" not-null="true" />
<element column="qname" type="QName" length="200"/>
</set>
<!-- inverse assoc to parent childassocs -->
<set
name="parentAssocs"
inverse="true"
lazy="false"
fetch="join"
cascade="none"
optimistic-lock="true" >
<key column="child_node_id" />
<one-to-many class="org.alfresco.repo.domain.hibernate.ChildAssocImpl" />
</set>
<!-- inverse assoc to child childassocs -->
<set
name="childAssocs"
inverse="true"
lazy="true"
fetch="select"
cascade="none"
optimistic-lock="true" >
<key column="parent_node_id" />
<one-to-many class="org.alfresco.repo.domain.hibernate.ChildAssocImpl" />
</set>
<!-- inverse assoc to source nodeassocs -->
<set
name="sourceNodeAssocs"
inverse="true"
lazy="true"
fetch="select"
cascade="none"
optimistic-lock="true" >
<key column="target_node_id" />
<one-to-many class="org.alfresco.repo.domain.hibernate.NodeAssocImpl" />
</set>
<!-- inverse assoc to target nodeassocs -->
<set
name="targetNodeAssocs"
inverse="true"
lazy="true"
fetch="select"
cascade="none"
optimistic-lock="true" >
<key column="source_node_id" />
<one-to-many class="org.alfresco.repo.domain.hibernate.NodeAssocImpl" />
</set>
</class>
<class
name="org.alfresco.repo.domain.hibernate.NodeStatusImpl"
proxy="org.alfresco.repo.domain.NodeStatus"
table="node_status"
dynamic-update="false"
dynamic-insert="false"
select-before-update="false"
lazy="true"
optimistic-lock="version" >
<!-- composite PK -->
<composite-id name="key" class="org.alfresco.repo.domain.NodeKey">
<key-property name="protocol" length="50" />
<key-property name="identifier" length="100" />
<key-property name="guid" length="36" />
</composite-id>
<!-- forward assoc to node (optional) -->
<many-to-one
name="node"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
column="node_id"
lazy="false"
fetch="join"
unique="false"
not-null="false" />
<property name="changeTxnId" column="change_txn_id" type="string" length="56" not-null="true" />
<property name="deleted" column="deleted" type="boolean" not-null="true" />
</class>
<class
name="org.alfresco.repo.domain.hibernate.ChildAssocImpl"
proxy="org.alfresco.repo.domain.ChildAssoc"
dynamic-insert="false"
dynamic-update="false"
lazy="true"
optimistic-lock="version"
table="child_assoc" >
<!-- auto-generated ID -->
<id name="id" column="id" type="long" >
<generator class="native" />
</id>
<!-- forward assoc to parent node -->
<many-to-one
name="parent"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
lazy="proxy"
fetch="select"
optimistic-lock="true"
not-null="true" >
<column name="parent_node_id" />
</many-to-one>
<!-- forward assoc to child node -->
<many-to-one
name="child"
lazy="proxy"
fetch="select"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
optimistic-lock="true"
not-null="true" >
<column name="child_node_id" />
</many-to-one>
<property name="typeQName" column="type_qname" type="QName" length="255" not-null="true" />
<property name="qname" column="qname" type="QName" length="255" not-null="true" />
<property name="isPrimary" column="is_primary" />
<property name="index" column="assoc_index" />
</class>
<class
name="org.alfresco.repo.domain.hibernate.NodeAssocImpl"
proxy="org.alfresco.repo.domain.NodeAssoc"
table="node_assoc" >
<!-- auto-generated ID -->
<id name="id" column="id" type="long" >
<generator class="native" />
</id>
<!-- forward assoc to source node -->
<many-to-one
name="source"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
lazy="false"
fetch="join"
not-null="true" >
<column name="source_node_id" />
</many-to-one>
<!-- forward assoc to target node -->
<many-to-one
name="target"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
lazy="false"
fetch="join"
not-null="true" >
<column name="target_node_id" />
</many-to-one>
<property name="typeQName" column="type_qname" type="QName" length="255" not-null="true" />
</class>
<query name="store.GetAllStores">
select
store
from
org.alfresco.repo.domain.hibernate.StoreImpl as store
</query>
<query name="node.GetNodeAssoc">
select
assoc
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
where
assoc.source = :sourceNode and
assoc.target = :targetNode and
assoc.typeQName = :assocTypeQName
</query>
<query name="node.GetNodeAssocTargets">
select
target
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
join assoc.target as target
where
assoc.source = :sourceNode and
assoc.typeQName = :assocTypeQName
</query>
<query name="node.GetNodeAssocSources">
select
source
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
join assoc.source as source
where
assoc.target = :targetNode and
assoc.typeQName = :assocTypeQName
</query>
<query name="node.GetNextChangeTxnIds">
select distinct
status.changeTxnId
from
org.alfresco.repo.domain.hibernate.NodeStatusImpl as status
where
status.changeTxnId > :currentTxnId
order by
status.changeTxnId
</query>
<query name="node.GetChangedNodeStatusesCount">
select
count(status.changeTxnId)
from
org.alfresco.repo.domain.hibernate.NodeStatusImpl as status
where
status.key.protocol = :storeProtocol and
status.key.identifier = :storeIdentifier and
status.deleted = :deleted and
status.changeTxnId = :changeTxnId
</query>
<query name="node.GetChangedNodeStatuses">
select
status
from
org.alfresco.repo.domain.hibernate.NodeStatusImpl as status
where
status.key.protocol = :storeProtocol and
status.key.identifier = :storeIdentifier and
status.deleted = :deleted and
status.changeTxnId = :changeTxnId
</query>
<query name="node.GetContentDataStrings">
select distinct
props.stringValue
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
join
node.properties props
where
props.stringValue like 'contentUrl%'
</query>
<query name="node.patch.GetNodesWithPersistedSerializableProperties">
select distinct
node
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
where
node.properties.serializableValue is not null and
node.properties.multiValued = false
</query>
</hibernate-mapping>