merge hibernate4 migration branch into trunk
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / TermBase.java
index 96656ca30a3f9e2df3981a7f06fda7560e9db6ff..6665c8786979a204bd308dc0f72c39142d598c70 100644 (file)
@@ -31,14 +31,13 @@ import org.hibernate.LazyInitializationException;
 import org.hibernate.annotations.Cascade;
 import org.hibernate.annotations.CascadeType;
 import org.hibernate.annotations.Type;
+import org.hibernate.search.annotations.Analyze;
 import org.hibernate.search.annotations.Field;
-import org.hibernate.search.annotations.IndexedEmbedded;
-import org.hibernate.validator.constraints.Length;
 
 import eu.etaxonomy.cdm.model.description.FeatureTree;
 import eu.etaxonomy.cdm.model.description.TextData;
+import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
 import eu.etaxonomy.cdm.strategy.cache.common.TermDefaultCacheStrategy;
-import eu.etaxonomy.cdm.validation.annotation.NullOrNotEmpty;
 
 @XmlAccessorType(XmlAccessType.FIELD)
 @XmlType(name = "TermBase", propOrder = {
@@ -51,22 +50,20 @@ import eu.etaxonomy.cdm.validation.annotation.NullOrNotEmpty;
     FeatureTree.class
 })
 @MappedSuperclass
-public abstract class TermBase extends IdentifiableEntity{
+public abstract class TermBase extends IdentifiableEntity<IIdentifiableEntityCacheStrategy >{
     private static final long serialVersionUID = 1471561531632115822L;
     @SuppressWarnings("unused")
     private static final Logger logger = Logger.getLogger(TermBase.class);
 
     @XmlElement(name = "URI")
-    @Field(index=org.hibernate.search.annotations.Index.UN_TOKENIZED)
-    @NullOrNotEmpty
-    @Length(max = 255)
+    @Field(analyze = Analyze.NO)
     @Type(type="uriUserType")
     private URI uri;
 
     @XmlElementWrapper(name = "Representations")
     @XmlElement(name = "Representation")
-    @OneToMany(fetch=FetchType.EAGER)
-    @Cascade( { CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.DELETE, CascadeType.DELETE_ORPHAN})
+    @OneToMany(fetch=FetchType.EAGER, orphanRemoval=true)
+    @Cascade( { CascadeType.SAVE_UPDATE, CascadeType.MERGE, CascadeType.DELETE})
     // @IndexedEmbedded no need for embedding since we are using the DefinedTermBaseClassBridge
     private Set<Representation> representations = new HashSet<Representation>();
 
@@ -80,8 +77,8 @@ public abstract class TermBase extends IdentifiableEntity{
     }
     public TermBase(String term, String label, String labelAbbrev) {
         super();
-        this.addRepresentation(new Representation(term, label, labelAbbrev, Language.DEFAULT()) );
         initCacheStrategy();
+        this.addRepresentation(new Representation(term, label, labelAbbrev, Language.DEFAULT()) );
     }
 
     public Set<Representation> getRepresentations() {
@@ -90,6 +87,10 @@ public abstract class TermBase extends IdentifiableEntity{
 
     public void addRepresentation(Representation representation) {
         this.representations.add(representation);
+        // this is just a preliminary solution (see ticket #3148)
+        if(representation.language!=null && representation.language.equals(Language.DEFAULT())){
+               this.regenerateTitleCache();
+        }
     }
 
     public void removeRepresentation(Representation representation) {