1
|
/* Package Annotations*/
|
2
|
|
3
|
@javax.xml.bind.annotation.XmlSchema(namespace = "http://etaxonomy.eu/cdm/model/common/1.0", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
|
4
|
@com.sun.xml.bind.XmlAccessorFactory(eu.etaxonomy.cdm.jaxb.CdmAccessorFactoryImpl.class)
|
5
|
@org.hibernate.annotations.GenericGenerators(
|
6
|
{
|
7
|
/* @see {@link eu.etaxonomy.cdm.persistence.hibernate.TableGenerator} */
|
8
|
@GenericGenerator(
|
9
|
name="custom-enhanced-table",
|
10
|
strategy = "eu.etaxonomy.cdm.persistence.hibernate.TableGenerator",
|
11
|
parameters = {
|
12
|
@Parameter(name="table_name", value = "hibernate_sequences"),
|
13
|
@Parameter(name="optimizer", value = "pooled"),
|
14
|
/* initial_value = increment_size as proposed to fix an issue with pooled optimizer
|
15
|
* http://opensource.atlassian.com/projects/hibernate/browse/HHH-3608?focusedCommentId=37112&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_37112
|
16
|
*/
|
17
|
@Parameter(name="initial_value", value= "10"),
|
18
|
@Parameter(name="increment_size", value = "10"),
|
19
|
/* we want to have a sequence per table */
|
20
|
@Parameter(name="prefer_entity_table_as_segment_value", value="true")
|
21
|
}
|
22
|
),
|
23
|
/* Steve Ebersole of Hibernate highly recommends the use of the two new generators
|
24
|
* http://relation.to/2082.lace
|
25
|
* Also see: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html#mapping-declaration-id-enhanced
|
26
|
*/
|
27
|
/* new table generator
|
28
|
* always stores sequences in a table. May be configured to return a sequence on a per table basis
|
29
|
* RECOMMENDED WHEN RUNNING A CDM DATASOURCE IN A MULTI CLIENT ENVIRONMENT
|
30
|
*/
|
31
|
@GenericGenerator(
|
32
|
name="enhanced-table",
|
33
|
strategy = "org.hibernate.id.enhanced.TableGenerator",
|
34
|
parameters = {
|
35
|
@Parameter(name="table_name", value = "hibernate_sequences"),
|
36
|
@Parameter(name="optimizer", value = "pooled"),
|
37
|
/* initial_value = increment_size as proposed to fix an issue with pooled optimizer
|
38
|
* http://opensource.atlassian.com/projects/hibernate/browse/HHH-3608?focusedCommentId=37112&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_37112
|
39
|
*/
|
40
|
@Parameter(name="initial_value", value= "10"),
|
41
|
@Parameter(name="increment_size", value = "10"),
|
42
|
/* we want to have a sequence per table */
|
43
|
@Parameter(name="prefer_entity_table_as_segment_value", value="true")
|
44
|
}
|
45
|
),
|
46
|
/* new sequence generator
|
47
|
* Using sequence when the dialect supports it, otherwise it will emulate a sequence using a table in the db
|
48
|
* This method will result in database wide unique id's */
|
49
|
@GenericGenerator(
|
50
|
name="enhanced-sequence",
|
51
|
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
|
52
|
parameters = {
|
53
|
@Parameter(name="optimizer", value = "pooled"),
|
54
|
/* initial_value = increment_size as proposed to fix an issue with pooled optimizer
|
55
|
* http://opensource.atlassian.com/projects/hibernate/browse/HHH-3608?focusedCommentId=37112&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_37112
|
56
|
*/
|
57
|
@Parameter(name="initial_value", value= "10"),
|
58
|
@Parameter(name="increment_size", value = "10")
|
59
|
}
|
60
|
),
|
61
|
/* A couple of old style generators */
|
62
|
/* generates identifiers of type long, short or int that are unique only when no other process
|
63
|
* is inserting data into the same table.
|
64
|
* DO NOT USE IN A CLUSTER OR MULTIPLE CLIENT ENVIRONMENT */
|
65
|
@GenericGenerator(
|
66
|
name="system-increment",
|
67
|
strategy = "increment"
|
68
|
),
|
69
|
/* supports identity columns in DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL.
|
70
|
* The returned identifier is of type long, short or int. */
|
71
|
@GenericGenerator(
|
72
|
name="system-identity",
|
73
|
strategy = "identity"
|
74
|
|
75
|
),
|
76
|
/* uses a hi/lo algorithm to efficiently generate identifiers of type long, short or int,
|
77
|
* given a table and column (by default hibernate_unique_key and next_hi respectively) as
|
78
|
* a source of hi values. The hi/lo algorithm generates identifiers that are unique only
|
79
|
* for a particular database. */
|
80
|
@GenericGenerator(
|
81
|
name="system-hilo",
|
82
|
strategy = "hilo"
|
83
|
),
|
84
|
/* uses a sequence in DB2, PostgreSQL, Oracle, SAP DB, McKoi or a generator in Interbase.
|
85
|
* The returned identifier is of type long, short or int */
|
86
|
@GenericGenerator(
|
87
|
name="system-sequence",
|
88
|
strategy = "sequence"
|
89
|
),
|
90
|
/* selects identity, sequence or hilo depending upon the capabilities of the underlying database. */
|
91
|
@GenericGenerator(
|
92
|
name="system-native",
|
93
|
strategy = "native"
|
94
|
)
|
95
|
}
|
96
|
)
|
97
|
|
98
|
|
99
|
|
100
|
@org.hibernate.annotations.TypeDefs( {
|
101
|
//TODO needed ??
|
102
|
@org.hibernate.annotations.TypeDef(name="persistentDuration", typeClass=org.jadira.usertype.dateandtime.joda.PersistentDurationAsString.class),
|
103
|
@org.hibernate.annotations.TypeDef(name="dateTimeUserType", typeClass=org.jadira.usertype.dateandtime.joda.PersistentDateTime.class),
|
104
|
@org.hibernate.annotations.TypeDef(name="partialUserType", typeClass=eu.etaxonomy.cdm.hibernate.PartialUserType.class),
|
105
|
@org.hibernate.annotations.TypeDef(name="uuidUserType", typeClass=eu.etaxonomy.cdm.hibernate.UUIDUserType.class),
|
106
|
@org.hibernate.annotations.TypeDef(name="uriUserType", typeClass=eu.etaxonomy.cdm.hibernate.URIUserType.class),
|
107
|
@org.hibernate.annotations.TypeDef(name="enumUserType", typeClass=eu.etaxonomy.cdm.hibernate.EnumUserType.class),
|
108
|
@org.hibernate.annotations.TypeDef(name="doiUserType", typeClass=eu.etaxonomy.cdm.hibernate.DOIUserType.class),
|
109
|
@org.hibernate.annotations.TypeDef(name="orcidUserType", typeClass=eu.etaxonomy.cdm.hibernate.OrcidUserType.class),
|
110
|
@org.hibernate.annotations.TypeDef(name="shiftUserType", typeClass=eu.etaxonomy.cdm.hibernate.ShiftUserType.class),
|
111
|
@org.hibernate.annotations.TypeDef(name="bigDecimalUserType", typeClass=eu.etaxonomy.cdm.hibernate.BigDecimalUserType.class),
|
112
|
})
|
113
|
@org.hibernate.annotations.AnyMetaDef(name = "CdmBase" ,
|
114
|
metaType="string",
|
115
|
idType="integer",
|
116
|
metaValues={
|
117
|
//Identifiable Entities
|
118
|
@MetaValue(value = "Institution", targetEntity = Institution.class),
|
119
|
@MetaValue(value = "Person", targetEntity = Person.class),
|
120
|
@MetaValue(value = "Team", targetEntity = Team.class),
|
121
|
@MetaValue(value = "MediaKey", targetEntity = MediaKey.class),
|
122
|
@MetaValue(value = "SpecimenDescription", targetEntity = SpecimenDescription.class),
|
123
|
@MetaValue(value = "TaxonDescription", targetEntity = TaxonDescription.class),
|
124
|
@MetaValue(value = "TaxonNameDescription", targetEntity = TaxonNameDescription.class),
|
125
|
@MetaValue(value = "PolytomousKey", targetEntity = PolytomousKey.class),
|
126
|
@MetaValue(value = "Media", targetEntity = Media.class),
|
127
|
@MetaValue(value = "DnaSample", targetEntity = DnaSample.class),
|
128
|
@MetaValue(value = "TaxonName", targetEntity = TaxonName.class),
|
129
|
@MetaValue(value = "Collection", targetEntity = Collection.class),
|
130
|
@MetaValue(value = "FieldUnit", targetEntity = FieldUnit.class),
|
131
|
@MetaValue(value = "DerivedUnit", targetEntity = DerivedUnit.class),
|
132
|
@MetaValue(value = "Reference", targetEntity = Reference.class),
|
133
|
@MetaValue(value = "Classification", targetEntity = Classification.class),
|
134
|
@MetaValue(value = "Synonym", targetEntity = Synonym.class),
|
135
|
@MetaValue(value = "Taxon", targetEntity = Taxon.class),
|
136
|
|
137
|
@MetaValue(value = "TermTree", targetEntity = TermTree.class),
|
138
|
@MetaValue(value = "PhylogeneticTree", targetEntity = PhylogeneticTree.class),
|
139
|
@MetaValue(value = "MediaSpecimen", targetEntity = MediaSpecimen.class),
|
140
|
@MetaValue(value = "TermVocabulary", targetEntity = TermVocabulary.class),
|
141
|
@MetaValue(value = "OrderedTermVocabulary", targetEntity = OrderedTermVocabulary.class),
|
142
|
|
143
|
@MetaValue(value = "AnnotationType", targetEntity = AnnotationType.class),
|
144
|
@MetaValue(value = "DefinedTerm", targetEntity = DefinedTerm.class),
|
145
|
@MetaValue(value = "DerivationEventType", targetEntity = DerivationEventType.class),
|
146
|
@MetaValue(value = "ExtensionType", targetEntity = ExtensionType.class),
|
147
|
@MetaValue(value = "Feature", targetEntity = Feature.class),
|
148
|
@MetaValue(value = "Language", targetEntity = Language.class),
|
149
|
@MetaValue(value = "MarkerType", targetEntity = MarkerType.class),
|
150
|
@MetaValue(value = "MeasurementUnit", targetEntity = MeasurementUnit.class),
|
151
|
@MetaValue(value = "NamedAreaType", targetEntity = NamedAreaType.class),
|
152
|
@MetaValue(value = "NaturalLanguageTerm", targetEntity = NaturalLanguageTerm.class),
|
153
|
@MetaValue(value = "ReferenceSystem", targetEntity = ReferenceSystem.class),
|
154
|
@MetaValue(value = "RightsType", targetEntity = RightsType.class),
|
155
|
@MetaValue(value = "StatisticalMeasure", targetEntity = StatisticalMeasure.class),
|
156
|
@MetaValue(value = "TextFormat", targetEntity = TextFormat.class),
|
157
|
|
158
|
@MetaValue(value = "NamedArea", targetEntity = NamedArea.class),
|
159
|
@MetaValue(value = "Country", targetEntity = Country.class),
|
160
|
@MetaValue(value = "NamedAreaLevel", targetEntity = NamedAreaLevel.class),
|
161
|
@MetaValue(value = "NomenclaturalStatusType", targetEntity = NomenclaturalStatusType.class),
|
162
|
@MetaValue(value = "OrderedTerm", targetEntity = OrderedTerm.class),
|
163
|
@MetaValue(value = "PresenceAbsenceTerm", targetEntity = PresenceAbsenceTerm.class),
|
164
|
@MetaValue(value = "Rank", targetEntity = Rank.class),
|
165
|
@MetaValue(value = "HybridRelationshipType", targetEntity = HybridRelationshipType.class),
|
166
|
@MetaValue(value = "NameRelationshipType", targetEntity = NameRelationshipType.class),
|
167
|
@MetaValue(value = "SynonymType", targetEntity = SynonymType.class),
|
168
|
@MetaValue(value = "TaxonRelationshipType", targetEntity = TaxonRelationshipType.class),
|
169
|
@MetaValue(value = "State", targetEntity = State.class),
|
170
|
@MetaValue(value = "NameTypeDesignationStatus", targetEntity = NameTypeDesignationStatus.class),
|
171
|
@MetaValue(value = "SpecimenTypeDesignationStatus", targetEntity = SpecimenTypeDesignationStatus.class),
|
172
|
|
173
|
|
174
|
//Annotatable Entities
|
175
|
@MetaValue(value = "TextData", targetEntity = TextData.class),
|
176
|
@MetaValue(value = "CategoricalData", targetEntity = CategoricalData.class),
|
177
|
@MetaValue(value = "CommonTaxonName", targetEntity = CommonTaxonName.class),
|
178
|
@MetaValue(value = "Distribution", targetEntity = Distribution.class),
|
179
|
@MetaValue(value = "IndividualsAssociation", targetEntity = IndividualsAssociation.class),
|
180
|
@MetaValue(value = "QuantitativeData", targetEntity = QuantitativeData.class),
|
181
|
@MetaValue(value = "TaxonInteraction", targetEntity = TaxonInteraction.class),
|
182
|
|
183
|
|
184
|
@MetaValue(value = "Sequence", targetEntity = Sequence.class),
|
185
|
@MetaValue(value = "NomenclaturalStatus", targetEntity = NomenclaturalStatus.class),
|
186
|
|
187
|
@MetaValue(value = "Annotation", targetEntity = Annotation.class),
|
188
|
|
189
|
@MetaValue(value = "User", targetEntity = User.class), //required?
|
190
|
|
191
|
|
192
|
@MetaValue(value = "AmplificationResult", targetEntity = AmplificationResult.class),
|
193
|
@MetaValue(value = "Amplification", targetEntity = Amplification.class),
|
194
|
@MetaValue(value = "DerivationEvent", targetEntity = DerivationEvent.class),
|
195
|
@MetaValue(value = "DeterminationEvent", targetEntity = DeterminationEvent.class),
|
196
|
@MetaValue(value = "GatheringEvent", targetEntity = GatheringEvent.class),
|
197
|
@MetaValue(value = "MaterialOrMethodEvent", targetEntity = MaterialOrMethodEvent.class),
|
198
|
@MetaValue(value = "Cloning", targetEntity = Cloning.class),
|
199
|
@MetaValue(value = "PreservationMethod", targetEntity = PreservationMethod.class),
|
200
|
@MetaValue(value = "SingleRead", targetEntity = SingleRead.class),
|
201
|
@MetaValue(value = "HomotypicalGroup", targetEntity = HomotypicalGroup.class),
|
202
|
@MetaValue(value = "Identifier", targetEntity = Identifier.class),
|
203
|
@MetaValue(value = "Credit", targetEntity = Credit.class),
|
204
|
@MetaValue(value = "LanguageString", targetEntity = LanguageString.class),
|
205
|
@MetaValue(value = "Representation", targetEntity = Representation.class),
|
206
|
@MetaValue(value = "Rights", targetEntity = Rights.class),
|
207
|
@MetaValue(value = "Primer", targetEntity = Primer.class),
|
208
|
@MetaValue(value = "TaxonNode", targetEntity = TaxonNode.class),
|
209
|
@MetaValue(value = "TaxonNodeAgentRelation", targetEntity = TaxonNodeAgentRelation.class),
|
210
|
@MetaValue(value = "DescriptiveDataSet", targetEntity = DescriptiveDataSet.class),
|
211
|
@MetaValue(value = "MultiAccessKey", targetEntity = MultiAccessKey.class),
|
212
|
|
213
|
@MetaValue(value = "DescriptionElementSource", targetEntity = DescriptionElementSource.class),
|
214
|
@MetaValue(value = "IdentifiableSource", targetEntity = IdentifiableSource.class),
|
215
|
@MetaValue(value = "HybridRelationship", targetEntity = HybridRelationship.class),
|
216
|
@MetaValue(value = "NameRelationship", targetEntity = NameRelationship.class),
|
217
|
@MetaValue(value = "TaxonRelationship", targetEntity = TaxonRelationship.class),
|
218
|
@MetaValue(value = "NameTypeDesignation", targetEntity = NameTypeDesignation.class),
|
219
|
@MetaValue(value = "SpecimenTypeDesignation", targetEntity = SpecimenTypeDesignation.class),
|
220
|
})
|
221
|
package eu.etaxonomy.cdm.model.common;
|
222
|
|
223
|
import org.hibernate.annotations.GenericGenerator;
|
224
|
import org.hibernate.annotations.MetaValue;
|
225
|
import org.hibernate.annotations.Parameter;
|
226
|
|
227
|
import eu.etaxonomy.cdm.model.agent.Institution;
|
228
|
import eu.etaxonomy.cdm.model.agent.Person;
|
229
|
import eu.etaxonomy.cdm.model.agent.Team;
|
230
|
import eu.etaxonomy.cdm.model.description.CategoricalData;
|
231
|
import eu.etaxonomy.cdm.model.description.CommonTaxonName;
|
232
|
import eu.etaxonomy.cdm.model.description.DescriptionElementSource;
|
233
|
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
|
234
|
import eu.etaxonomy.cdm.model.description.Distribution;
|
235
|
import eu.etaxonomy.cdm.model.description.Feature;
|
236
|
import eu.etaxonomy.cdm.model.description.IndividualsAssociation;
|
237
|
import eu.etaxonomy.cdm.model.description.MeasurementUnit;
|
238
|
import eu.etaxonomy.cdm.model.description.MediaKey;
|
239
|
import eu.etaxonomy.cdm.model.description.MultiAccessKey;
|
240
|
import eu.etaxonomy.cdm.model.description.NaturalLanguageTerm;
|
241
|
import eu.etaxonomy.cdm.model.description.PolytomousKey;
|
242
|
import eu.etaxonomy.cdm.model.description.PresenceAbsenceTerm;
|
243
|
import eu.etaxonomy.cdm.model.description.QuantitativeData;
|
244
|
import eu.etaxonomy.cdm.model.description.SpecimenDescription;
|
245
|
import eu.etaxonomy.cdm.model.description.State;
|
246
|
import eu.etaxonomy.cdm.model.description.StatisticalMeasure;
|
247
|
import eu.etaxonomy.cdm.model.description.TaxonDescription;
|
248
|
import eu.etaxonomy.cdm.model.description.TaxonInteraction;
|
249
|
import eu.etaxonomy.cdm.model.description.TaxonNameDescription;
|
250
|
import eu.etaxonomy.cdm.model.description.TextData;
|
251
|
import eu.etaxonomy.cdm.model.description.TextFormat;
|
252
|
import eu.etaxonomy.cdm.model.location.Country;
|
253
|
import eu.etaxonomy.cdm.model.location.NamedArea;
|
254
|
import eu.etaxonomy.cdm.model.location.NamedAreaLevel;
|
255
|
import eu.etaxonomy.cdm.model.location.NamedAreaType;
|
256
|
import eu.etaxonomy.cdm.model.location.ReferenceSystem;
|
257
|
import eu.etaxonomy.cdm.model.media.Media;
|
258
|
import eu.etaxonomy.cdm.model.media.Rights;
|
259
|
import eu.etaxonomy.cdm.model.media.RightsType;
|
260
|
import eu.etaxonomy.cdm.model.molecular.Amplification;
|
261
|
import eu.etaxonomy.cdm.model.molecular.AmplificationResult;
|
262
|
import eu.etaxonomy.cdm.model.molecular.Cloning;
|
263
|
import eu.etaxonomy.cdm.model.molecular.DnaSample;
|
264
|
import eu.etaxonomy.cdm.model.molecular.PhylogeneticTree;
|
265
|
import eu.etaxonomy.cdm.model.molecular.Primer;
|
266
|
import eu.etaxonomy.cdm.model.molecular.Sequence;
|
267
|
import eu.etaxonomy.cdm.model.molecular.SingleRead;
|
268
|
import eu.etaxonomy.cdm.model.name.HomotypicalGroup;
|
269
|
import eu.etaxonomy.cdm.model.name.HybridRelationship;
|
270
|
import eu.etaxonomy.cdm.model.name.HybridRelationshipType;
|
271
|
import eu.etaxonomy.cdm.model.name.NameRelationship;
|
272
|
import eu.etaxonomy.cdm.model.name.NameRelationshipType;
|
273
|
import eu.etaxonomy.cdm.model.name.NameTypeDesignation;
|
274
|
import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;
|
275
|
import eu.etaxonomy.cdm.model.name.NomenclaturalStatus;
|
276
|
import eu.etaxonomy.cdm.model.name.NomenclaturalStatusType;
|
277
|
import eu.etaxonomy.cdm.model.name.Rank;
|
278
|
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation;
|
279
|
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus;
|
280
|
import eu.etaxonomy.cdm.model.name.TaxonName;
|
281
|
import eu.etaxonomy.cdm.model.occurrence.Collection;
|
282
|
import eu.etaxonomy.cdm.model.occurrence.DerivationEvent;
|
283
|
import eu.etaxonomy.cdm.model.occurrence.DerivationEventType;
|
284
|
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit;
|
285
|
import eu.etaxonomy.cdm.model.occurrence.DeterminationEvent;
|
286
|
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
|
287
|
import eu.etaxonomy.cdm.model.occurrence.GatheringEvent;
|
288
|
import eu.etaxonomy.cdm.model.occurrence.MaterialOrMethodEvent;
|
289
|
import eu.etaxonomy.cdm.model.occurrence.MediaSpecimen;
|
290
|
import eu.etaxonomy.cdm.model.occurrence.PreservationMethod;
|
291
|
import eu.etaxonomy.cdm.model.permission.User;
|
292
|
import eu.etaxonomy.cdm.model.reference.Reference;
|
293
|
import eu.etaxonomy.cdm.model.taxon.Classification;
|
294
|
import eu.etaxonomy.cdm.model.taxon.Synonym;
|
295
|
import eu.etaxonomy.cdm.model.taxon.SynonymType;
|
296
|
import eu.etaxonomy.cdm.model.taxon.Taxon;
|
297
|
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
|
298
|
import eu.etaxonomy.cdm.model.taxon.TaxonNodeAgentRelation;
|
299
|
import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;
|
300
|
import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;
|
301
|
import eu.etaxonomy.cdm.model.term.DefinedTerm;
|
302
|
import eu.etaxonomy.cdm.model.term.OrderedTerm;
|
303
|
import eu.etaxonomy.cdm.model.term.OrderedTermVocabulary;
|
304
|
import eu.etaxonomy.cdm.model.term.Representation;
|
305
|
import eu.etaxonomy.cdm.model.term.TermTree;
|
306
|
import eu.etaxonomy.cdm.model.term.TermVocabulary;
|
307
|
|