1
+ <?xml version =" 1.0" encoding =" utf-8" ?>
2
+ <!--
3
+
4
+ This mapping demonstrates the use of Hibernate with
5
+ all-handwritten SQL!
6
+
7
+ This version is for Sybase/mssql
8
+ -->
9
+
10
+ <hibernate-mapping xmlns =" urn:nhibernate-mapping-2.0" default-access =" field.camelcase"
11
+ namespace =" NHibernate.Test.SqlTest"
12
+ assembly =" NHibernate.Test" >
13
+
14
+ <class name =" Organization" table =" ORGANIZATION" >
15
+ <id name =" id" unsaved-value =" 0" column =" ORGID" >
16
+ <generator class =" increment" />
17
+ </id >
18
+ <property name =" name" column =" NAME" not-null =" true" />
19
+ <set lazy =" true" name =" employments"
20
+ inverse=" true" >
21
+ <key column =" EMPLOYER" />
22
+ <!-- only needed for DDL generation -->
23
+ <one-to-many class =" Employment" />
24
+ </set >
25
+ </class >
26
+
27
+ <class name =" Person" table =" PERSON" >
28
+ <id name =" id" unsaved-value =" 0" column =" PERID" >
29
+ <generator class =" increment" />
30
+ </id >
31
+ <property name =" name" column =" NAME" not-null =" true" />
32
+
33
+ </class >
34
+
35
+ <class name =" Employment" table =" EMPLOYMENT" >
36
+ <id name =" employmentId" unsaved-value =" 0" column =" EMPID" >
37
+ <generator class =" increment" />
38
+ </id >
39
+ <many-to-one name =" employee" column =" EMPLOYEE" not-null =" true" update =" false" />
40
+ <many-to-one name =" employer" column =" EMPLOYER" not-null =" true" update =" false" />
41
+ <property name =" startDate" column =" STARTDATE" not-null =" false" type =" NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" />
42
+ <property name =" endDate" column =" ENDDATE" insert =" false" type =" NHibernate.Test.SqlTest.NullDateUserType, NHibernate.Test" />
43
+ <property name =" regionCode" column =" REGIONCODE" update =" false" />
44
+ <property name =" salary" type =" NHibernate.Test.SqlTest.MonetaryAmountUserType, NHibernate.Test" >
45
+ <column name =" VALUE" sql-type =" float" />
46
+ <column name =" CURRENCY" />
47
+ </property >
48
+ </class >
49
+
50
+ <class name =" Order" table =" TBL_ORDER" >
51
+ <composite-id name =" orderId" class =" Order+OrderIdType" >
52
+ <key-property name =" orgid" />
53
+ <key-property name =" ordernumber" />
54
+ </composite-id >
55
+
56
+ <many-to-one name =" product" >
57
+ <column name =" PROD_ORGID" />
58
+ <column name =" PROD_NO" />
59
+ </many-to-one >
60
+ <many-to-one name =" person" />
61
+ </class >
62
+
63
+ <class name =" Product" >
64
+ <composite-id name =" productId" class =" Product+ProductIdType" >
65
+ <key-property name =" orgid" />
66
+ <key-property name =" productnumber" />
67
+ </composite-id >
68
+
69
+ <property name =" name" />
70
+
71
+ <set name =" orders" inverse =" true" >
72
+ <key >
73
+ <column name =" PROD_ORGID" />
74
+ <column name =" PROD_NO" />
75
+ </key >
76
+ <one-to-many class =" Order" />
77
+ </set >
78
+ </class >
79
+
80
+ <class name =" Dimension" >
81
+ <id name =" id" type =" long" >
82
+ <generator class =" increment" />
83
+ </id >
84
+ <property name =" length" column =" d_len" />
85
+ <property name =" width" column =" d_width" />
86
+ </class >
87
+
88
+ <class name =" SpaceShip" >
89
+ <id name =" id" type =" integer" >
90
+ <generator class =" increment" />
91
+ </id >
92
+ <property name =" name" column =" fld_name" />
93
+ <property name =" model" column =" fld_model" />
94
+ <property name =" speed" column =" fld_speed" />
95
+ <component name =" dimensions" >
96
+ <property name =" length" column =" fld_length" />
97
+ <property name =" width" column =" fld_width" />
98
+ </component >
99
+ </class >
100
+
101
+ <class name =" Speech" >
102
+ <id name =" id" type =" integer" >
103
+ <generator class =" increment" />
104
+ </id >
105
+ <property name =" name" column =" name" />
106
+ <property name =" length" column =" flength" />
107
+ </class >
108
+
109
+ <resultset name =" org-emp-regionCode" >
110
+ <return-scalar column =" regionCode" type =" string" />
111
+ <return alias =" org" class =" Organization" />
112
+ <return-join alias =" emp" property =" org.employments" />
113
+ </resultset >
114
+
115
+ <resultset name =" org-emp-person" >
116
+ <return alias =" org" class =" Organization" />
117
+ <return-join alias =" emp" property =" org.employments" />
118
+ <return-join alias =" pers" property =" emp.employee" />
119
+ </resultset >
120
+
121
+
122
+ <resultset name =" org-description" >
123
+ <return alias =" org" class =" Organization" />
124
+ <return-join alias =" emp" property =" org.employments" />
125
+ </resultset >
126
+
127
+ <resultset name =" spaceship-vol" >
128
+ <return alias =" sps" class =" SpaceShip" >
129
+ <return-property name =" id" column =" id" />
130
+ <return-property name =" name" column =" name" />
131
+ <return-property name =" model" column =" model" />
132
+ <return-property name =" speed" column =" speed" />
133
+ <return-property name =" dimensions.length" column =" length" />
134
+ <return-property name =" dimensions.width" column =" width" />
135
+ </return >
136
+ <return-scalar column =" surface" type =" double" />
137
+ <return-scalar column =" volume" type =" double" />
138
+ </resultset >
139
+
140
+ <resultset name =" speech" >
141
+ <return alias =" sp" class =" Speech" >
142
+ <return-property name =" id" column =" id" />
143
+ <return-property name =" name" column =" name" />
144
+ <return-property name =" length" column =" flength" />
145
+ </return >
146
+ <return-scalar column =" scalarName" type =" string" />
147
+ </resultset >
148
+
149
+ <sql-query name =" spaceship" resultset-ref =" spaceship-vol" >
150
+ select id as id,
151
+ fld_name as name,
152
+ fld_model as model,
153
+ fld_speed as speed,
154
+ fld_length as length,
155
+ fld_width as width,
156
+ fld_length * fld_width as surface,
157
+ fld_length * fld_width *10 as volume
158
+ from SpaceShip
159
+ </sql-query >
160
+
161
+ <sql-query name =" orgNamesOnly" >
162
+ <return-scalar column =" NAME" type =" string" />
163
+ SELECT org.NAME FROM ORGANIZATION org
164
+ </sql-query >
165
+
166
+ <sql-query name =" orgNamesAndOrgs" >
167
+ <return-scalar column =" thename" type =" string" />
168
+ <return alias =" org" class =" Organization" />
169
+ SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id}
170
+ FROM ORGANIZATION org
171
+ ORDER BY thename
172
+ </sql-query >
173
+
174
+ <sql-query name =" orgsAndOrgNames" >
175
+ <return alias =" org" class =" Organization" />
176
+ <return-scalar column =" thename" type =" string" />
177
+ SELECT org.NAME AS thename, org.NAME AS {org.name}, org.ORGID AS {org.id}
178
+ FROM ORGANIZATION org
179
+ ORDER BY thename
180
+ </sql-query >
181
+
182
+ <sql-query name =" orgIdsAndOrgNames" >
183
+ <return-scalar column =" orgid" type =" long" />
184
+ <return-scalar column =" thename" type =" string" />
185
+ SELECT NAME AS thename, ORGID AS orgid
186
+ FROM ORGANIZATION
187
+ ORDER BY thename
188
+ </sql-query >
189
+
190
+ <sql-query name =" AllEmploymentAsMapped" >
191
+ <return class =" Employment" />
192
+ SELECT * FROM EMPLOYMENT
193
+ </sql-query >
194
+
195
+ <sql-query name =" EmploymentAndPerson" >
196
+ <return class =" Employment" />
197
+ <return class =" Person" />
198
+ SELECT * FROM EMPLOYMENT, PERSON
199
+ </sql-query >
200
+
201
+ <sql-query name =" organizationEmploymentsExplicitAliases" >
202
+ <load-collection alias =" empcol" role =" Organization.employments" />
203
+ SELECT empcol.EMPLOYER as {empcol.key}, empcol.EMPID as {empcol.element}, {empcol.element.*}
204
+ FROM EMPLOYMENT empcol
205
+ WHERE EMPLOYER = :id
206
+ ORDER BY STARTDATE ASC, EMPLOYEE ASC
207
+ </sql-query >
208
+
209
+ <sql-query name =" organizationreturnproperty" >
210
+ <return alias =" org" class =" Organization" >
211
+ <return-property name =" id" column =" ORGID" />
212
+ <return-property name =" name" column =" NAME" />
213
+ </return >
214
+ <return-join alias =" emp" property =" org.employments" >
215
+ <return-property name =" key" column =" EMPLOYER" />
216
+ <return-property name =" element" column =" EMPID" />
217
+ <return-property name =" element.employee" column =" EMPLOYEE" />
218
+ <return-property name =" element.employer" column =" EMPLOYER" />
219
+ <return-property name =" element.startDate" column =" XSTARTDATE" />
220
+ <return-property name =" element.endDate" column =" ENDDATE" />
221
+ <return-property name =" element.regionCode" column =" REGIONCODE" />
222
+ <return-property name =" element.employmentId" column =" EMPID" />
223
+ <return-property name =" element.salary" >
224
+ <return-column name =" VALUE" />
225
+ <return-column name =" CURRENCY" />
226
+ </return-property >
227
+ </return-join >
228
+ SELECT org.ORGID as orgid,
229
+ org.NAME as name,
230
+ emp.EMPLOYER as employer,
231
+ emp.EMPID as empid,
232
+ emp.EMPLOYEE as employee,
233
+ emp.EMPLOYER as employer,
234
+ emp.STARTDATE as xstartDate,
235
+ emp.ENDDATE as endDate,
236
+ emp.REGIONCODE as regionCode,
237
+ emp.VALUE as VALUE,
238
+ emp.CURRENCY as CURRENCY
239
+ FROM ORGANIZATION org
240
+ LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
241
+ </sql-query >
242
+
243
+
244
+ <sql-query name =" organizationautodetect" resultset-ref =" org-description" >
245
+ <!-- equal to "organizationpropertyreturn" but since no {} nor return-property are used hibernate will fallback to use the columns directly from the mapping -->
246
+ <return alias =" org" class =" Organization" />
247
+ <return-join alias =" emp" property =" org.employments" />
248
+ SELECT org.ORGID as orgid,
249
+ org.NAME as name,
250
+ emp.EMPLOYER as employer,
251
+ emp.EMPID as empid,
252
+ emp.EMPLOYEE as employee,
253
+ emp.EMPLOYER as employer,
254
+ emp.STARTDATE as startDate,
255
+ emp.ENDDATE as endDate,
256
+ emp.REGIONCODE as regionCode,
257
+ emp.VALUE as VALUE,
258
+ emp.CURRENCY as CURRENCY
259
+ FROM ORGANIZATION org
260
+ LEFT OUTER JOIN EMPLOYMENT emp ON org.ORGID = emp.EMPLOYER
261
+ </sql-query >
262
+
263
+ </hibernate-mapping >
0 commit comments