Dave Ward 57cd1bfd94 ALFCOM-3110: Groups added to sites became invisible to Share client
- Root groups are now those in the default zone that are not children of groups in the same zone

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@15051 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
2009-07-01 11:39:37 +00:00

854 lines
29 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>
<class
name="org.alfresco.repo.domain.hibernate.StoreImpl"
proxy="org.alfresco.repo.domain.Store"
table="alf_store"
dynamic-update="false"
dynamic-insert="false"
select-before-update="false"
optimistic-lock="version" >
<!-- auto-generated ID -->
<id name="id" column="id" type="long" >
<generator class="native" />
</id>
<!-- Protocol and Identifier must be unique -->
<natural-id mutable="true">
<property name="protocol" column="protocol" type="string" length="50" not-null="true" />
<property name="identifier" column="identifier" type="string" length="100" not-null="true" />
</natural-id>
<!-- Optimistic locking -->
<version column="version" name="version" type="long" />
<!-- forward assoc to root node -->
<many-to-one
name="rootNode"
not-null="true"
foreign-key="fk_alf_store_root"
lazy="proxy"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
fetch="select" >
<column name="root_node_id" />
</many-to-one>
</class>
<class
name="org.alfresco.repo.domain.hibernate.NodeImpl"
proxy="org.alfresco.repo.domain.Node"
table="alf_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>
<!-- Store and UUID must be unique -->
<natural-id mutable="true">
<!-- forward assoc to store -->
<many-to-one
name="store"
class="org.alfresco.repo.domain.hibernate.StoreImpl"
column="store_id"
not-null="true"
lazy="false"
foreign-key="fk_alf_node_store"
fetch="join" />
<!-- the store-unique identifier -->
<property name="uuid" column="uuid" type="string" length="36" />
</natural-id>
<!-- Optimistic locking -->
<version column="version" name="version" type="long" />
<!-- forward assoc to Transaction -->
<many-to-one
name="transaction"
class="org.alfresco.repo.domain.hibernate.TransactionImpl"
column="transaction_id"
foreign-key="fk_alf_node_txn"
lazy="proxy"
fetch="select"
unique="false"
not-null="true"
cascade="none" />
<!-- Keep track of the node even once it dies -->
<property name="deleted" column="node_deleted" type="boolean" not-null="true" index="idx_alf_node_del"/>
<!-- Node type QName (mandatory) -->
<property name="typeQNameId" column="type_qname_id" type="long" not-null="true" /> <!-- fk_alf_node_tqn -->
<!-- forward assoc to access control list (optional) -->
<many-to-one
name="accessControlList"
class="org.alfresco.repo.domain.hibernate.DbAccessControlListImpl"
column="acl_id"
foreign-key="fk_alf_node_acl"
lazy="false"
fetch="join"
unique="false"
not-null="false"
cascade="none" />
<!-- forward assoc to properties -->
<map
name="properties"
table="alf_node_properties"
lazy="true"
fetch="select"
batch-size="128"
sort="unsorted"
inverse="false"
optimistic-lock="false"
cascade="delete" >
<key column="node_id" foreign-key="fk_alf_nprop_n" not-null="true" />
<composite-map-key class="org.alfresco.repo.domain.PropertyMapKey">
<key-property name="qnameId" column="qname_id" type="long" />
<key-property name="listIndex" column="list_index" type="int" />
<key-property name="localeId" column="locale_id" type="long" />
</composite-map-key>
<composite-element class="org.alfresco.repo.domain.NodePropertyValue" >
<property name="actualType" column="actual_type_n" type="integer" not-null="true" />
<property name="persistedType" column="persisted_type_n" type="integer" 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="alf_node_aspects"
lazy="true"
fetch="select"
batch-size="128"
inverse="false"
sort="unsorted"
optimistic-lock="false"
cascade="delete" >
<key column="node_id" foreign-key="fk_alf_nasp_n" not-null="true" />
<element column="qname_id" type="long" not-null="true" /> <!-- fk_alf_nasp_qn -->
</set>
<!-- cm:auditable properties -->
<component name="auditableProperties" class="org.alfresco.repo.domain.AuditableProperties" optimistic-lock="false">
<property name="auditCreator" column="audit_creator" type="string" length="255" not-null="false"/>
<property name="auditCreated" column="audit_created" type="string" length="30" not-null="false"/>
<property name="auditModifier" column="audit_modifier" type="string" length="255" not-null="false"/>
<property name="auditModified" column="audit_modified" type="string" length="30" not-null="false"/>
<property name="auditAccessed" column="audit_accessed" type="string" length="30" not-null="false"/>
</component>
</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="alf_child_assoc" >
<!-- auto-generated ID -->
<id name="id" column="id" type="long" >
<generator class="native" />
</id>
<natural-id mutable="true">
<!-- forward assoc to parent node -->
<many-to-one
name="parent"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
lazy="proxy"
foreign-key="fk_alf_cass_pnode"
fetch="select"
optimistic-lock="false"
not-null="true" >
<column name="parent_node_id" not-null="true" />
</many-to-one>
<property name="typeQNameId" column="type_qname_id" type="long" not-null="true" /> <!-- fk_alf_cass_tqn -->
<property name="childNodeNameCrc" column="child_node_name_crc" type="long" not-null="true" />
<property name="childNodeName" column="child_node_name" type="string" length="50" not-null="true" />
</natural-id>
<!-- Optimistic locking -->
<version column="version" name="version" type="long" />
<!-- forward assoc to child node -->
<many-to-one
name="child"
lazy="proxy"
foreign-key="fk_alf_cass_cnode"
fetch="select"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
optimistic-lock="false"
not-null="true" >
<column name="child_node_id" not-null="true"/>
</many-to-one>
<property name="qnameNamespaceId" column="qname_ns_id" type="long" not-null="true" /> <!-- fk_alf_cass_qnns -->
<property name="qnameLocalName" column="qname_localname" type="string" length="255" not-null="true" index="idx_alf_cass_qnln" />
<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="alf_node_assoc" >
<!-- auto-generated ID -->
<id name="id" column="id" type="long" >
<generator class="native" />
</id>
<natural-id mutable="true">
<!-- forward assoc to source node -->
<many-to-one
name="source"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
optimistic-lock="false"
foreign-key="fk_alf_nass_snode"
lazy="false"
fetch="join"
not-null="true" >
<column name="source_node_id" not-null="true" />
</many-to-one>
<!-- forward assoc to target node -->
<many-to-one
name="target"
class="org.alfresco.repo.domain.hibernate.NodeImpl"
optimistic-lock="false"
foreign-key="fk_alf_nass_tnode"
lazy="false"
fetch="join"
not-null="true" >
<column name="target_node_id" not-null="true" />
</many-to-one>
<property name="typeQNameId" column="type_qname_id" type="long" not-null="true" /> <!-- fk_alf_nass_tqn -->
</natural-id>
<!-- Optimistic locking -->
<version column="version" name="version" type="long" />
</class>
<query name="store.GetStoreByAll">
select
store
from
org.alfresco.repo.domain.hibernate.StoreImpl as store
join store.rootNode
where
store.protocol = :protocol and
store.identifier = :identifier
</query>
<query name="store.GetAllStores">
select
store
from
org.alfresco.repo.domain.hibernate.StoreImpl as store
</query>
<query name="node.GetNodeByStoreIdAndUuid">
select
node,
acl
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
left outer join node.accessControlList as acl
where
node.store.id = :storeId and
node.uuid = :uuid
</query>
<query name="node.GetParentAssocs">
select
assoc,
parent,
child
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
where
child.id = :childId
order by
assoc.index,
assoc.id
</query>
<query name="node.DeleteParentAssocs">
delete
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
where
assoc.child.id = :childId
</query>
<query name="node.DeleteChildAssocs">
delete
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
where
assoc.parent.id = :parentId
</query>
<query name="node.DeleteNodeAssocs">
delete
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
where
assoc.source.id = :nodeId or
assoc.target.id = :nodeId
</query>
<query name="node.GetChildNodeIds">
select
child.id
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.child as child
where
assoc.parent.id = :parentId
order by
child.id
</query>
<query name="node.GetChildAssocsByAll">
select
assoc
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
where
assoc.parent.id = :parentId and
assoc.child.id = :childId and
assoc.typeQNameId = :typeQNameId and
assoc.qnameNamespaceId = :qnameNamespaceId and
assoc.qnameLocalName = :qnameLocalName
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocs">
select
assoc
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
where
assoc.parent.id = :parentId
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocByTypeAndName">
select
assoc
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
where
assoc.parent.id = :parentId and
assoc.typeQNameId = :typeQNameId and
assoc.childNodeNameCrc = :childNodeNameCrc and
assoc.childNodeName = :childNodeName
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocRefsByTypeAndNameList">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
parent.id = :parentId and
assoc.typeQNameId = :typeQNameId and
assoc.childNodeName in (:childNodeNames)
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocRefs">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
parent.id = :parentId
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocRefsByQName">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
parent.id = :parentId and
assoc.qnameNamespaceId = :qnameNamespaceId and
assoc.qnameLocalName = :qnameLocalName
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocRefsByTypeQNames">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
parent.id = :parentId and
assoc.typeQNameId in (:childAssocTypeQNameIds)
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocRefsByTypeQNameAndQName">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
parent.id = :parentId and
assoc.typeQNameId = :typeQNameId and
assoc.qnameNamespaceId = :qnameNamespaceId and
assoc.qnameLocalName = :qnameLocalName
order by
assoc.index,
assoc.id
</query>
<query name="node.GetChildAssocRefsByChildTypeQName">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
parent.id = :parentId and
child.typeQNameId in (:childTypeQNameIds)
order by
assoc.index,
assoc.id
</query>
<query name="node.GetPrimaryChildAssocs">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
assoc.parent.id = :parentId and
assoc.isPrimary = true
order by
assoc.index,
assoc.id
</query>
<query name="node.GetPrimaryChildAssocsNotInSameStore">
select
assoc.id,
assoc.typeQNameId,
assoc.qnameNamespaceId,
assoc.qnameLocalName,
assoc.childNodeName,
assoc.childNodeNameCrc,
assoc.isPrimary,
assoc.index,
child.id,
store.protocol,
store.identifier,
child.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join assoc.child as child
join child.store as store
where
assoc.parent.id = :parentId and
assoc.isPrimary = true and
child.store.id != parent.store.id
order by
assoc.index,
assoc.id
</query>
<query name="node.GetNodesWithChildrenInDifferentStore">
select
parent.id,
parentStore.protocol,
parentStore.identifier,
parent.uuid
from
org.alfresco.repo.domain.hibernate.ChildAssocImpl as assoc
join assoc.parent as parent
join parent.store as parentStore
join assoc.child as child
join child.store as childStore
where
parentStore.id = :parentStoreId and
childStore.id != :parentStoreId and
parent.id > :minNodeId and
assoc.isPrimary = true
order by
parent.id
</query>
<query name="node.GetNodesWithAspect">
select
node.id,
node.store.protocol,
node.store.identifier,
node.uuid
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
join node.aspects as aspects
where
node.id > :minNodeId and
aspects.id = :aspectQNameId
order by
node.id
</query>
<query name="node.GetNodeAssoc">
select
assoc
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
where
assoc.source.id = :sourceId and
assoc.target.id = :targetId and
assoc.typeQNameId = :assocTypeQNameId
</query>
<query name="node.GetNodeAssocsToAndFrom">
select
assoc
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
where
assoc.source.id = :nodeId or
assoc.target.id = :nodeId
</query>
<query name="node.GetTargetAssocs">
select
assoc
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
join assoc.source as source
join assoc.target as target
where
assoc.source.id = :sourceId
</query>
<query name="node.GetSourceAssocs">
select
assoc
from
org.alfresco.repo.domain.hibernate.NodeAssocImpl as assoc
join assoc.source as source
join assoc.target as target
where
assoc.target.id = :targetId
</query>
<sql-query name="node.GetNodesWithPropertyValuesByStringAndStore">
<return alias="n" class="org.alfresco.repo.domain.hibernate.NodeImpl"/>
SELECT
{n.*}
FROM
alf_node n
JOIN alf_store s on s.id = n.store_id
JOIN alf_node_properties p ON n.id = p.node_id
WHERE
s.protocol = :storeProtocol AND
s.identifier = :storeIdentifier AND
p.qname_id = :propQNameID AND
p.string_value = :propStringValue
</sql-query>
<sql-query name="node.GetContentUrlsForStoreOld">
<return-scalar column="owner" type="string"/>
<return-scalar column="creator" type="string"/>
<return-scalar column="contenturl" type="string"/>
SELECT
p1.string_value AS owner,
n.audit_creator AS creator,
p2.string_value AS contenturl
FROM
alf_node n
JOIN alf_store s ON (s.id = n.store_id AND n.type_qname_id = :contentTypeQNameID)
LEFT JOIN alf_node_properties p1 ON (p1.node_id = n.id AND p1.qname_id = :ownerPropQNameID)
JOIN alf_node_properties p2 ON (p2.node_id = n.id AND p2.qname_id = :contentPropQNameID)
WHERE
s.protocol = :storeProtocol AND
s.identifier = :storeIdentifier AND
p2.string_value IS NOT NULL AND
(p1.string_value != 'System' OR (p1.string_value IS NULL AND n.audit_creator != 'System'))
</sql-query>
<sql-query name="node.GetContentUrlsForStoreNew">
<return-scalar column="owner" type="string"/>
<return-scalar column="creator" type="string"/>
<return-scalar column="contentDataId" type="long"/>
SELECT
p1.string_value AS owner,
n.audit_creator AS creator,
cd.id AS contentDataId
FROM
alf_node n
JOIN alf_store s ON (s.id = n.store_id AND n.type_qname_id = :contentTypeQNameID)
LEFT JOIN alf_node_properties p1 ON (p1.node_id = n.id AND p1.qname_id = :ownerPropQNameID)
JOIN alf_node_properties p2 ON (p2.node_id = n.id AND p2.qname_id = :contentPropQNameID)
JOIN alf_content_data cd ON (p2.long_value = cd.id)
WHERE
s.protocol = :storeProtocol AND
s.identifier = :storeIdentifier AND
(p1.string_value != 'System' OR (p1.string_value IS NULL AND n.audit_creator != 'System'))
</sql-query>
<sql-query name="node.GetUsersWithoutUsage">
<return-scalar column="username" type="string"/>
<return-scalar column="uuid" type="string"/>
SELECT
p1.string_value AS username,
n.uuid AS uuid
FROM
alf_node n
JOIN alf_store s ON (s.id = n.store_id AND n.type_qname_id = :personTypeQNameID)
JOIN alf_node_properties p1 ON (p1.node_id = n.id AND p1.qname_id = :usernamePropQNameID)
LEFT JOIN alf_node_properties p2 ON (p2.node_id = n.id AND p2.qname_id = :sizeCurrentPropQNameID)
WHERE
s.protocol = :storeProtocol AND
s.identifier = :storeIdentifier AND
(p2.persisted_type_n IS NULL OR p2.persisted_type_n = 0) AND
p1.string_value != 'System'
</sql-query>
<sql-query name="node.GetUsersWithUsage">
<return-scalar column="username" type="string"/>
<return-scalar column="uuid" type="string"/>
SELECT
p1.string_value AS username,
n.uuid AS uuid
FROM
alf_node n
JOIN alf_store s ON (s.id = n.store_id AND n.type_qname_id = :personTypeQNameID)
JOIN alf_node_properties p1 ON (p1.node_id = n.id AND p1.qname_id = :usernamePropQNameID)
LEFT JOIN alf_node_properties p2 ON (p2.node_id = n.id AND p2.qname_id = :sizeCurrentPropQNameID)
WHERE
s.protocol = :storeProtocol AND
s.identifier = :storeIdentifier AND
(p2.persisted_type_n != 0 AND p2.persisted_type_n IS NOT NULL) AND
p1.string_value != 'System'
</sql-query>
<query name="node.GetNodesWithPropertyValuesByActualType">
select
node
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
join
node.properties prop
where
(
prop.actualType = :actualType or
prop.actualType = 9
) and
prop.persistedType != 0
</query>
<query name="node.patch.GetNodesWithPersistedSerializableProperties">
select distinct
node
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
join node.properties as props
where
props.serializableValue is not null
</query>
<query name="node.GetDeletedNodesByMaxTxnId">
<![CDATA[
select
node.id,
node.store.protocol,
node.store.identifier,
node.uuid
from
org.alfresco.repo.domain.hibernate.NodeImpl as node
join node.transaction as txn
where
node.id >= :minNodeId and
node.deleted = true and
txn.id <= :maxTxnId
order by
node.id asc
]]>
</query>
<sql-query name="node.GetNodesWithoutParentAssocsOfType">
<return-scalar column="id" type="long"/>
<return-scalar column="protocol" type="string"/>
<return-scalar column="identifier" type="string"/>
<return-scalar column="uuid" type="string"/>
SELECT
n.id,
s.protocol,
s.identifier,
n.uuid
FROM
alf_node n
JOIN alf_store s ON (s.id = n.store_id)
LEFT OUTER JOIN alf_child_assoc a ON (a.child_node_id = n.id AND a.type_qname_id = :assocTypeQNameID)
WHERE
s.protocol = :storeProtocol AND
s.identifier = :storeIdentifier AND
n.type_qname_id = :nodeTypeQNameID AND
n.node_deleted = :isDeleted AND
a.child_node_id IS NULL
</sql-query>
<sql-query name="node.GetChildAssocsWithoutParentAssocsOfType">
<return-scalar column="id" type="long"/>
<return-scalar column="type_qname_id" type="long"/>
<return-scalar column="qname_ns_id" type="long"/>
<return-scalar column="qname_localname" type="string"/>
<return-scalar column="child_node_name" type="string"/>
<return-scalar column="child_node_name_crc" type="long"/>
<return-scalar column="is_primary" type="boolean"/>
<return-scalar column="assoc_index" type="integer"/>
<return-scalar column="id" type="long"/>
<return-scalar column="protocol" type="string"/>
<return-scalar column="identifier" type="string"/>
<return-scalar column="uuid" type="string"/>
select
z1.id,
z1.type_qname_id,
z1.qname_ns_id,
z1.qname_localname,
z1.child_node_name,
z1.child_node_name_crc,
z1.is_primary,
z1.assoc_index,
n.id,
s.protocol,
s.identifier,
n.uuid
FROM
(alf_node n
JOIN alf_store s ON (s.id = n.store_id)
JOIN alf_child_assoc z1 ON (z1.parent_node_id = :parentId and z1.child_node_id = n.id))
LEFT OUTER JOIN
(alf_child_assoc a
JOIN alf_child_assoc z2 ON (z2.parent_node_id = :parentId AND z2.child_node_id = a.parent_node_id ))
ON (a.child_node_id = n.id AND a.type_qname_id = :assocTypeQNameID)
WHERE
a.child_node_id IS NULL
</sql-query>
</hibernate-mapping>