Fixing hibernate mappings relating to issues #457 and #460, allowing schema generatio...
authorben.clark <ben.clark@localhost>
Tue, 9 Dec 2008 12:00:43 +0000 (12:00 +0000)
committerben.clark <ben.clark@localhost>
Tue, 9 Dec 2008 12:00:43 +0000 (12:00 +0000)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/OrderedTermBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/RelationshipBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/RelationshipTermBase.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/common/TermVocabulary.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/HybridRelationship.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NameRelationship.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/SynonymRelationship.java
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/taxon/TaxonRelationship.java

index b0099392643143abd8ad9f713141b7bc38f4ab2e..43928ae1b84623edeb7b7afae451a2c6821f6fd1 100644 (file)
@@ -29,7 +29,7 @@ import javax.persistence.*;
 })
 @XmlRootElement(name = "OrderedTermBase")
 @Entity
-public abstract class OrderedTermBase<T extends OrderedTermBase> extends DefinedTermBase implements Comparable<T> {
+public abstract class OrderedTermBase<T extends OrderedTermBase> extends DefinedTermBase<T> implements Comparable<T> {
        static Logger logger = Logger.getLogger(OrderedTermBase.class);
        
        //Order index, value < 1 means that this Term is not in order yet
index c9bd41cfe1345ae2f18abb54059573980f5d63e2..33505145cc094505cab8f30168f0759d9cdd0984 100644 (file)
@@ -9,17 +9,20 @@
 
 package eu.etaxonomy.cdm.model.common;
 
+import javax.persistence.MappedSuperclass;
+import javax.persistence.Transient;
 import javax.persistence.FetchType;
 import javax.persistence.ManyToOne;
 import javax.persistence.MappedSuperclass;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlElement;
-import javax.xml.bind.annotation.XmlIDREF;
 import javax.xml.bind.annotation.XmlRootElement;
-import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
 
+import org.apache.log4j.Logger;
+
+import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+
 import org.apache.log4j.Logger;
 import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
@@ -31,33 +34,13 @@ import eu.etaxonomy.cdm.model.taxon.TaxonBase;
  * @author m.doering
  */
 @XmlAccessorType(XmlAccessType.FIELD)
-@XmlType(name = "RelationshipBase", propOrder = {
-       "relatedFrom",
-       "relatedTo",
-    "type"
-})
+@XmlType(name = "RelationshipBase", propOrder = { })
 @XmlRootElement(name = "RelationshipBase")
 @MappedSuperclass
 public abstract class RelationshipBase<FROM extends IRelated, TO extends IRelated, TYPE extends RelationshipTermBase> extends ReferencedEntityBase {
        private static final long serialVersionUID = -5030154633820061997L;
        static Logger logger = Logger.getLogger(RelationshipBase.class);
 
-//  FIXME: TaxonBase.class does not cover TaxonNameBase which also implements IRelated.
-       @XmlElement(name = "RelatedFrom", type = TaxonBase.class)
-    @XmlIDREF
-    @XmlSchemaType(name = "IDREF")
-       private FROM relatedFrom;
-
-       @XmlElement(name = "RelatedTo", type = TaxonBase.class)
-    @XmlIDREF
-    @XmlSchemaType(name = "IDREF")
-       private TO relatedTo;
-
-       @XmlElement(name = "RelationshipType")
-    @XmlIDREF
-    @XmlSchemaType(name = "IDREF")
-       private TYPE type;
-
        protected RelationshipBase(){
                super();
        }
@@ -81,34 +64,20 @@ public abstract class RelationshipBase<FROM extends IRelated, TO extends IRelate
                to.addRelationship(this);
        }
        
-       @ManyToOne
-       public TYPE getType(){
-               return this.type;
-       }
-       protected void setType(TYPE type){
-               this.type = type;
-       }
+       @Transient
+       public abstract TYPE getType();
        
+       protected abstract void setType(TYPE type);
        
-       @ManyToOne(fetch=FetchType.EAGER)
-       @Cascade({CascadeType.SAVE_UPDATE})
-       protected FROM getRelatedFrom() {
-               return relatedFrom;
-       }
-       protected void setRelatedFrom(FROM relatedFrom) {
-               this.relatedFrom = relatedFrom;
-       }
-
+       @Transient
+       protected abstract FROM getRelatedFrom();
        
-       @ManyToOne(fetch=FetchType.EAGER)
-       @Cascade({CascadeType.SAVE_UPDATE})
-       protected TO getRelatedTo() {
-               return relatedTo;
-       }
-       protected void setRelatedTo(TO relatedTo) {
-               this.relatedTo = relatedTo;
-       }
-
+       protected abstract void setRelatedFrom(FROM relatedFrom);
+       
+       @Transient
+       protected abstract TO getRelatedTo();
+       
+       protected abstract void setRelatedTo(TO relatedTo);
        
 // TODO
 //     UUID toUuid; 
index 0804e28f6bba2b9e7a3762c80ef8ca1368956fd0..6a83f52824a12c05b09fdf9e928a0eaba409fc88 100644 (file)
@@ -4,6 +4,7 @@ import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
+import javax.persistence.Entity;
 import javax.persistence.JoinTable;
 import javax.persistence.MappedSuperclass;
 import javax.persistence.OneToMany;
@@ -30,7 +31,7 @@ import au.com.bytecode.opencsv.CSVWriter;
     "inverseRepresentations"
 })
 @XmlRootElement(name = "RelationshipTermBase")
-@MappedSuperclass
+@Entity
 public abstract class RelationshipTermBase<T extends RelationshipTermBase> extends OrderedTermBase<T> {
        
        static Logger logger = Logger.getLogger(RelationshipTermBase.class);
index 3b7966afad41a1c9010fb60ea599adb1542a5bdf..2b22016866200d6ed3d9bc8276ec787416ff9020 100644 (file)
@@ -117,7 +117,7 @@ public class TermVocabulary<T extends DefinedTermBase> extends TermBase implemen
                this.terms = terms;
        }
        
-       @OneToMany(mappedBy="persistentVocabulary", fetch=FetchType.LAZY)
+       @OneToMany(mappedBy="persistentVocabulary", fetch=FetchType.LAZY, targetEntity = DefinedTermBase.class)
        @Type(type="DefinedTermBase")
        @Cascade({CascadeType.SAVE_UPDATE})
        public Set<T> getPersistentTerms() {
index 9cafcba7e7f169883460ddd5e958cda97bd7776c..104d32661b831b80de8ebf6db57dc4c77e92cae6 100644 (file)
@@ -11,11 +11,17 @@ package eu.etaxonomy.cdm.model.name;
 
 import eu.etaxonomy.cdm.model.common.RelationshipBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
+
 import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
 import javax.persistence.*;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
 
 /**
@@ -38,6 +44,9 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "HybridRelationship", propOrder = {
+       "relatedFrom",
+       "relatedTo",
+       "type",
     "ruleConsidered"
 })
 @Entity
@@ -49,6 +58,21 @@ public class HybridRelationship extends RelationshipBase<BotanicalName, Botanica
        //the note property.
        @XmlElement(name = "RuleConsidered")
        private String ruleConsidered;
+       
+       @XmlElement(name = "RelatedFrom")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private BotanicalName relatedFrom;
+
+       @XmlElement(name = "RelatedTo")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private BotanicalName relatedTo;
+       
+    @XmlElement(name = "Type")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private HybridRelationshipType type;
 
        //for hibernate use only, don't use
        @Deprecated
@@ -104,13 +128,13 @@ public class HybridRelationship extends RelationshipBase<BotanicalName, Botanica
         */
        @Transient
        public BotanicalName getParentName(){
-               return super.getRelatedFrom();
+               return this.getRelatedFrom();
        }
        /**
         * @see  #getParentName()
         */
        public void setParentName(BotanicalName parentName){
-               super.setRelatedFrom(parentName);
+               this.setRelatedFrom(parentName);
        }
 
        /** 
@@ -122,13 +146,13 @@ public class HybridRelationship extends RelationshipBase<BotanicalName, Botanica
         */
        @Transient
        public BotanicalName getHybridName(){
-               return super.getRelatedTo();
+               return this.getRelatedTo();
        }
        /**
         * @see  #getHybridName()
         */
        public void setHybridName(BotanicalName hybridName){
-               super.setRelatedTo(hybridName);
+               this.setRelatedTo(hybridName);
        }
 
        /** 
@@ -147,4 +171,36 @@ public class HybridRelationship extends RelationshipBase<BotanicalName, Botanica
                this.ruleConsidered = ruleConsidered;
        }
 
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected BotanicalName getRelatedFrom() {
+               return relatedFrom;
+       }
+
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected BotanicalName getRelatedTo() {
+               return relatedTo;
+       }
+
+       @ManyToOne
+       public HybridRelationshipType getType() {
+               return type;
+       }
+
+
+       protected void setRelatedFrom(BotanicalName relatedFrom) {
+               this.relatedFrom = relatedFrom;
+       }
+
+
+       protected void setRelatedTo(BotanicalName relatedTo) {
+               this.relatedTo = relatedTo;
+       }
+
+
+       protected void setType(HybridRelationshipType type) {
+               this.type = type;
+       }
+
 }
\ No newline at end of file
index 58e54745587d3e1259b07852a9cd5f3ab706a721..eb59563f319afa4c258d0db767e40c160189b8f5 100644 (file)
@@ -12,10 +12,15 @@ package eu.etaxonomy.cdm.model.name;
 import eu.etaxonomy.cdm.model.common.RelationshipBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
 import javax.persistence.*;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
 
 /**
@@ -36,8 +41,10 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "NameRelationship", propOrder = {
-    "ruleConsidered",
-    "type"
+       "relatedFrom",
+       "relatedTo",
+       "type",
+    "ruleConsidered"
 })
 @Entity
 public class NameRelationship extends RelationshipBase<TaxonNameBase, TaxonNameBase, NameRelationshipType> {
@@ -48,8 +55,18 @@ public class NameRelationship extends RelationshipBase<TaxonNameBase, TaxonNameB
        //the note property.
     @XmlElement(name = "RuleConsidered")
        private String ruleConsidered;
+    
+    @XmlElement(name = "RelatedFrom")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private TaxonNameBase relatedFrom;
+
+       @XmlElement(name = "RelatedTo")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private TaxonNameBase relatedTo;
        
-    @XmlElement(name = "NameRelationshipType")
+    @XmlElement(name = "Type")
        private NameRelationshipType type;
 
        //for hibernate, don't use
@@ -110,13 +127,13 @@ public class NameRelationship extends RelationshipBase<TaxonNameBase, TaxonNameB
         */
        @Transient
        public TaxonNameBase getFromName(){
-               return super.getRelatedFrom();
+               return this.getRelatedFrom();
        }
        /**
         * @see  #getFromName()
         */
        void setFromName(TaxonNameBase fromName){
-               super.setRelatedFrom(fromName);
+               this.setRelatedFrom(fromName);
        }
 
        /** 
@@ -128,13 +145,13 @@ public class NameRelationship extends RelationshipBase<TaxonNameBase, TaxonNameB
         */
        @Transient
        public TaxonNameBase getToName(){
-               return super.getRelatedTo();
+               return this.getRelatedTo();
        }
        /**
         * @see  #getToName()
         */
        void setToName(TaxonNameBase toName){
-               super.setRelatedTo(toName);
+               this.setRelatedTo(toName);
        }
 
        /** 
@@ -156,4 +173,36 @@ public class NameRelationship extends RelationshipBase<TaxonNameBase, TaxonNameB
                this.ruleConsidered = ruleConsidered;
        }
 
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})     
+       protected TaxonNameBase getRelatedFrom() {
+               return relatedFrom;
+       }
+
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected TaxonNameBase getRelatedTo() {
+               return relatedTo;
+       }
+
+       @ManyToOne
+       public NameRelationshipType getType() {
+               return type;
+       }
+
+
+       protected void setRelatedFrom(TaxonNameBase relatedFrom) {
+               this.relatedFrom = relatedFrom;
+       }
+
+
+       protected void setRelatedTo(TaxonNameBase relatedTo) {
+               this.relatedTo = relatedTo;
+       }
+
+
+       protected void setType(NameRelationshipType type) {
+               this.type = type;
+       }
+
 }
\ No newline at end of file
index 4fe00dd673784ced9a53d4169844ca73aaee3789..2deecb86e4eed632e809b3521cabd4f894d7ffa4 100644 (file)
@@ -15,11 +15,15 @@ import eu.etaxonomy.cdm.model.common.RelationshipTermBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 
 import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
 import javax.persistence.*;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
 import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlIDREF;
 import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.bind.annotation.XmlType;
 
 /**
@@ -43,6 +47,9 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "SynonymRelationship", propOrder = {
+       "relatedFrom",
+       "relatedTo",
+       "type",
     "isProParte",
     "isPartial"
 })
@@ -57,6 +64,20 @@ public class SynonymRelationship extends RelationshipBase<Synonym, Taxon, Synony
     @XmlElement(name = "IsPartial")
        private boolean isPartial = false;
 
+       @XmlElement(name = "RelatedFrom")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private Synonym relatedFrom;
+
+       @XmlElement(name = "RelatedTo")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private Taxon relatedTo;
+
+       @XmlElement(name = "Type")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private SynonymRelationshipType type;
        
        //for hibernate, don't use
        @Deprecated
@@ -135,7 +156,7 @@ public class SynonymRelationship extends RelationshipBase<Synonym, Taxon, Synony
         */
        @Transient
        public Taxon getAcceptedTaxon(){
-               return super.getRelatedTo();
+               return this.getRelatedTo();
        }
 
        /** 
@@ -151,7 +172,7 @@ public class SynonymRelationship extends RelationshipBase<Synonym, Taxon, Synony
         * @see                                 Taxon#getSynonymRelations()
         */
        protected void setAcceptedTaxon(Taxon acceptedTaxon){
-               super.setRelatedTo(acceptedTaxon);
+               this.setRelatedTo(acceptedTaxon);
        }
 
        /** 
@@ -165,7 +186,7 @@ public class SynonymRelationship extends RelationshipBase<Synonym, Taxon, Synony
         */
        @Transient
        public Synonym getSynonym(){
-               return super.getRelatedFrom();
+               return this.getRelatedFrom();
        }
        /** 
         * Sets the given {@link Synonym synonym} to <i>this</i> synonym relationship.
@@ -180,7 +201,35 @@ public class SynonymRelationship extends RelationshipBase<Synonym, Taxon, Synony
         * @see                         Synonym#getSynonymRelations()
         */
        protected void setSynonym(Synonym synonym){
-               super.setRelatedFrom(synonym);
+               this.setRelatedFrom(synonym);
+       }
+
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected Synonym getRelatedFrom() {
+               return relatedFrom;
        }
 
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected Taxon getRelatedTo() {
+               return relatedTo;
+       }
+
+       @ManyToOne
+       public SynonymRelationshipType getType() {
+               return type;
+       }
+
+       protected void setRelatedFrom(Synonym relatedFrom) {
+               this.relatedFrom = relatedFrom;
+       }
+       
+       protected void setRelatedTo(Taxon relatedTo) {
+               this.relatedTo = relatedTo;
+       }
+
+       protected void setType(SynonymRelationshipType type) {
+               this.type = type;
+       }
 }
\ No newline at end of file
index fbb6fc7a3fee6c2a2351f1ce1d4f18ca32ece6a4..b4679c5fc36ad3b672a90bbb23e2a90dd927c34a 100644 (file)
@@ -13,6 +13,9 @@ import eu.etaxonomy.cdm.model.common.RelationshipBase;
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
 
 import org.apache.log4j.Logger;
+import org.hibernate.annotations.Cascade;
+import org.hibernate.annotations.CascadeType;
+
 import javax.persistence.*;
 import javax.xml.bind.annotation.XmlAccessType;
 import javax.xml.bind.annotation.XmlAccessorType;
@@ -38,7 +41,9 @@ import javax.xml.bind.annotation.XmlType;
  */
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "TaxonRelationship", propOrder = {
-    "type"             
+       "relatedFrom",
+       "relatedTo",
+       "type",         
 })
 @XmlRootElement(name = "TaxonRelationship")
 @Entity
@@ -46,7 +51,17 @@ public class TaxonRelationship extends RelationshipBase<Taxon, Taxon, TaxonRelat
 
        static private final Logger logger = Logger.getLogger(TaxonRelationship.class);
 
-    @XmlElement(name = "TaxonRelationshipType")
+       @XmlElement(name = "RelatedFrom")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private Taxon relatedFrom;
+
+       @XmlElement(name = "RelatedTo")
+    @XmlIDREF
+    @XmlSchemaType(name = "IDREF")
+       private Taxon relatedTo;
+       
+    @XmlElement(name = "Type")
     @XmlIDREF
     @XmlSchemaType(name = "IDREF")
        private TaxonRelationshipType type;
@@ -132,4 +147,33 @@ public class TaxonRelationship extends RelationshipBase<Taxon, Taxon, TaxonRelat
                setRelatedTo(toTaxon);
        }
 
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected Taxon getRelatedFrom() {
+               return relatedFrom;
+       }
+
+       @ManyToOne(fetch=FetchType.EAGER)
+       @Cascade({CascadeType.SAVE_UPDATE})
+       protected Taxon getRelatedTo() {
+               return relatedTo;
+       }
+
+       @ManyToOne
+       public TaxonRelationshipType getType() {
+               return type;
+       }
+
+       protected void setRelatedFrom(Taxon relatedFrom) {
+               this.relatedFrom = relatedFrom;
+       }
+
+       protected void setRelatedTo(Taxon relatedTo) {
+               this.relatedTo = relatedTo;
+       }
+
+       protected void setType(TaxonRelationshipType type) {
+               this.type = type;
+       }
+
 }
\ No newline at end of file