/*
 * JPA entity template
 *
 *
 * Takatuka - Template fuer JPA2 Entitaeten (inklusive Bean Validation)
 *
 * Moeglichkeiten und Einschraenkungen:
 * - Beziehungen werden abgebildet
 * -- es gibt keine 1:1 Beziehungen
 * -- N:M Beziehungen sind immer bidirektional
 * - Vererbung wird nicht unterstuetzt
 * - Support für CustomData
 */
package de.ivu.elect.business.wahlvorschlag.entity;

@javax.persistence.NamedQueries(
 {



       @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.UK",
     query="SELECT o FROM Wahlvorschlag o WHERE "

                         + "o"
                +".discriminator"
              +" = ?1"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".nummer"
              +" = ?2"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".gebietsart"
                +".name"
              +" = ?3"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".gebietsart"
                +".mandant"
                +".nummer"
              +" = ?4"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahl"
                +".wahlart"
                +".name"
              +" = ?5"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahl"
                +".wahlart"
                +".mandant"
                +".nummer"
              +" = ?6"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahl"
                +".wahltermin"
                +".nummer"
              +" = ?7"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahl"
                +".wahltermin"
                +".wahldatum"
              +" = ?8"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahl"
                +".wahltermin"
                +".mandant"
                +".nummer"
              +" = ?9"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahltermin"
                +".nummer"
              +" = ?10"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahltermin"
                +".wahldatum"
              +" = ?11"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gebiet"
                +".wahltermin"
                +".mandant"
                +".nummer"
              +" = ?12"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gruppe"
                +".schluessel"
              +" = ?13"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gruppe"
                +".wahl"
                +".wahlart"
                +".name"
              +" = ?14"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gruppe"
                +".wahl"
                +".wahlart"
                +".mandant"
                +".nummer"
              +" = ?15"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gruppe"
                +".wahl"
                +".wahltermin"
                +".nummer"
              +" = ?16"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gruppe"
                +".wahl"
                +".wahltermin"
                +".wahldatum"
              +" = ?17"

             +" AND "         + "o"
                +".gruppeImGebiet"
                +".gruppe"
                +".wahl"
                +".wahltermin"
                +".mandant"
                +".nummer"
              +" = ?18"

     ,
   hints = {
              @javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "true"),
             @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
   }


   )
   
     ,   @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.CountWahlvorschlagByWahl",
     query="SELECT COUNT(obj) FROM Wahlvorschlag obj WHERE obj.gruppeImGebiet.gebiet.wahl = ?1",
     hints = {@javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "true"),
                            @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
             }
   )

        
         ,   @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.Gebiet",
     query="SELECT obj FROM Wahlvorschlag obj WHERE obj.gruppeImGebiet.gebiet = ?1",
     hints = {@javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "true"),
                            @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
             }
   )

        
         ,   @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.Gebiete",
     query="SELECT obj FROM Wahlvorschlag obj WHERE obj.gruppeImGebiet.gebiet IN (?1)",
     hints = {@javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "true"),
                            @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
             }
   )

        
         ,   @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.GebieteStatusCount",
     query="SELECT new de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatusAnzahl(o.wahlvorschlagStatus, COUNT(o)) FROM Wahlvorschlag o WHERE o.gruppeImGebiet.gebiet IN (?1) GROUP BY o.wahlvorschlagStatus",
     hints = {@javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "false"),
                            @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
             }
   )

        
         ,   @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.Gruppe",
     query="SELECT obj FROM Wahlvorschlag obj WHERE obj.gruppeImGebiet.gruppe = ?1",
     hints = {@javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "true"),
                            @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
             }
   )

        
         ,   @javax.persistence.NamedQuery(
     name="WAHLVORSCHLAG.Wahl",
     query="SELECT o FROM Wahlvorschlag o WHERE o.gruppeImGebiet.gebiet.wahl = ?1",
     hints = {@javax.persistence.QueryHint(name = "org.hibernate.cacheable", value = "true"),
                            @javax.persistence.QueryHint(name = "org.hibernate.flushMode", value = "commit")
             }
   )

        
     }
)
@javax.enterprise.inject.Vetoed
@javax.persistence.Entity
@javax.persistence.Table(name = "WAHLVORSCHLAG")
// @javax.persistence.IdClass(WahlvorschlagPK.class)
    @javax.persistence.EntityListeners(de.ivu.elect.jee.protokollierung.ProtokollEntityListener.class)
    @javax.persistence.Cacheable
@javax.persistence.Inheritance(strategy = javax.persistence.InheritanceType.JOINED)
@javax.persistence.DiscriminatorColumn(name = "DISCRIMINATOR")
@javax.persistence.DiscriminatorValue(Wahlvorschlag.DISCRIMINATOR_VALUE)

public
abstract
 class Wahlvorschlag
extends AbstractWahlvorschlag
  {

  private static final long serialVersionUID = 0L;

  public static final String DISCRIMINATOR_VALUE = "WAHLVORSCHLAG";

  /**
   * default constructor
   */
  public Wahlvorschlag() {
    super();
  }

    /**
     * @param original
     *
     * @deprecated Sollte nur mit Bedacht genutzt werden, da hier auch die Beziehungen kopiert werden. Deswegen markiert
     *             als Deprecated.
     */
    @Deprecated
    public Wahlvorschlag(Wahlvorschlag original){
      original.copyEntity(this);
    }

  /**
   * PRIMARY KEY
   */
  @javax.persistence.Id
  @javax.persistence.Column(name = "wahlvorschlag_id")
    @javax.persistence.GeneratedValue(strategy = javax.persistence.GenerationType.TABLE, generator = "Wahlvorschlag")
    @javax.persistence.TableGenerator(name = "Wahlvorschlag", table = "SEQUENCES", pkColumnName = "sequence_name", pkColumnValue = "Wahlvorschlag", valueColumnName = "next_val", allocationSize = 1000, initialValue = 0)
    protected java.lang.Long id;

  @Override
  public java.lang.Long getId() {
    return id;
  }

  public void setId(java.lang.Long id) {
    this.id = id;
  }

  @javax.persistence.Transient
  private transient WahlvorschlagPK pkCache;

  @Override
  public WahlvorschlagPK getPk() {
    if (pkCache==null || pkCache.getId() != id ) {
      pkCache = new WahlvorschlagPK(getId());
    }

    return pkCache;
  }

  public static <E extends Wahlvorschlag> java.util.Map<WahlvorschlagPK, E> mappeNachPk(java.util.Collection<E> entities){
    java.util.Map<WahlvorschlagPK, E> result = new java.util.HashMap<>();

    for (E entity : entities) {
      result.put(entity.getPk(), entity);
    }

    return result;
  }

  public static <E extends Wahlvorschlag> java.util.Map<Long, E> mappeNachId(java.util.Collection<E> entities){
    java.util.Map<Long, E> result = new java.util.HashMap<>();

    for (E entity : entities) {
      result.put(entity.getId(), entity);
    }

    return result;
  }



  /**
   * Indikator, ob sich ein Attribut oder eine UNIDIREKTIONALE n:1-Beziehungen geaendert hat
   */
  @javax.persistence.Transient
  protected boolean attributeChanged = false;

  public void setAttributeChanged() {
    attributeChanged = true;
  }

  public boolean isAttributeChanged() {
    return attributeChanged;
  }

  /**
   * Hilfsvariable fuer das Aktualisieren von Beziehungen
   */
  @javax.persistence.Transient
  protected boolean updateRelationship = false;


  public void resetAttributeChanged() {
        hasChangedDiscriminator = false;
          hasChangedKennwort = false;
          hasChangedKurzname = false;
          hasChangedPrivilegierungsTyp = false;
          hasChangedUnterstuetzerErfassbarAb = false;
          hasChangedAnzahlUnterstuetzerGeeignetErfasstExtern = false;
          hasChangedAnzahlUnterstuetzerNichtGeeignetErfasstExtern = false;
          hasChangedWahlvorschlagStatus = false;
          hasChangedZeitpunktDerEinreichung = false;
          hasChangedZusatzbezeichnung = false;
  
  

                                                
    attributeChanged = false;
  }


  /**
   * ATTRIBUTE
   */

    
  @javax.persistence.Column(name = "DISCRIMINATOR", nullable = WahlvorschlagConstants.DISCRIMINATOR_NULLABLE, length=WahlvorschlagConstants.DISCRIMINATOR_MAX_LENGTH)
        
  protected java.lang.String discriminator =  getInitialDiscriminator() ;

  @javax.persistence.Transient
  protected boolean hasChangedDiscriminator = false;

  public boolean hasChangedDiscriminator(){
    return hasChangedDiscriminator;
  }
  
  /**
   * Discriminator column for generalization
   *
   * getter for WAHLVORSCHLAG.DISCRIMINATOR
   */
  @javax.annotation.Nullable   @Override   public  java.lang.String getDiscriminator() {
        return discriminator;
      }

  /**
   * Discriminator column for generalization
   *
   * setter for WAHLVORSCHLAG.DISCRIMINATOR
   *
   * @param discriminator
   */
  @Override   public void setDiscriminator(@javax.annotation.Nullable  java.lang.String discriminator) {

       resetTkCache();
                  
                          java.lang.String discriminatorInternal = de.ivu.elect.jee.entity.EntityUtil.trimToNullOrMaxLength(discriminator, WahlvorschlagConstants.DISCRIMINATOR_MAX_LENGTH, getId(), getClass());
                  
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.discriminator
      , discriminatorInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedDiscriminator |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("discriminator");
      }


      

       this.discriminator = discriminatorInternal;

         }

        
  @javax.persistence.Column(name = "KENNWORT", nullable = WahlvorschlagConstants.KENNWORT_NULLABLE, length=WahlvorschlagConstants.KENNWORT_MAX_LENGTH)
        
  protected java.lang.String kennwort =  null;

  @javax.persistence.Transient
  protected boolean hasChangedKennwort = false;

  public boolean hasChangedKennwort(){
    return hasChangedKennwort;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertKennwort = false;
     @javax.persistence.Transient
     private transient java.lang.String wertNachLadenKennwort;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.KENNWORT
   */
  @javax.annotation.Nullable   @Override   public  java.lang.String getKennwort() {
        return kennwort;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.KENNWORT
   *
   * @param kennwort
   */
  @Override   public void setKennwort(@javax.annotation.Nullable  java.lang.String kennwort) {

       resetTkCache();
                  
                          java.lang.String kennwortInternal = de.ivu.elect.jee.entity.EntityUtil.trimToNullOrMaxLength(kennwort, WahlvorschlagConstants.KENNWORT_MAX_LENGTH, getId(), getClass());
                  
                java.lang.String alterWert = getKennwort();
         kennwortInternal = preProcessKennwort(kennwortInternal);
         preSetKennwort(alterWert, kennwortInternal);
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.kennwort
      , kennwortInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedKennwort |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("kennwort");
      }


             if (!isSeitLadenVeraendertKennwort) {
          isSeitLadenVeraendertKennwort = thisAttributChanged;
         if (isSeitLadenVeraendertKennwort){
           wertNachLadenKennwort=this.kennwort;
         }
       }
      

       this.kennwort = kennwortInternal;

                postSetKennwort(alterWert, kennwortInternal);
         }

  
    @Override
    protected java.lang.String preProcessKennwort(java.lang.String neuerWert) {
      return super.preProcessKennwort(neuerWert);
    }

    @Override
    protected void preSetKennwort(java.lang.String alterWert, java.lang.String neuerWert) {
      super.preSetKennwort(alterWert, neuerWert);
    }

    @Override
    protected void postSetKennwort(java.lang.String alterWert, java.lang.String neuerWert) {
      super.postSetKennwort(alterWert, neuerWert);
    }
        
  @javax.persistence.Column(name = "KURZNAME", nullable = WahlvorschlagConstants.KURZNAME_NULLABLE, length=WahlvorschlagConstants.KURZNAME_MAX_LENGTH)
        
  protected java.lang.String kurzname =  null;

  @javax.persistence.Transient
  protected boolean hasChangedKurzname = false;

  public boolean hasChangedKurzname(){
    return hasChangedKurzname;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertKurzname = false;
     @javax.persistence.Transient
     private transient java.lang.String wertNachLadenKurzname;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.KURZNAME
   */
  @javax.annotation.Nullable   @Override   public  java.lang.String getKurzname() {
        return kurzname;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.KURZNAME
   *
   * @param kurzname
   */
  @Override   public void setKurzname(@javax.annotation.Nullable  java.lang.String kurzname) {

       resetTkCache();
                  
                          java.lang.String kurznameInternal = de.ivu.elect.jee.entity.EntityUtil.trimToNullOrMaxLength(kurzname, WahlvorschlagConstants.KURZNAME_MAX_LENGTH, getId(), getClass());
                  
                java.lang.String alterWert = getKurzname();
         kurznameInternal = preProcessKurzname(kurznameInternal);
         preSetKurzname(alterWert, kurznameInternal);
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.kurzname
      , kurznameInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedKurzname |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("kurzname");
      }


             if (!isSeitLadenVeraendertKurzname) {
          isSeitLadenVeraendertKurzname = thisAttributChanged;
         if (isSeitLadenVeraendertKurzname){
           wertNachLadenKurzname=this.kurzname;
         }
       }
      

       this.kurzname = kurznameInternal;

                postSetKurzname(alterWert, kurznameInternal);
         }

  
    @Override
    protected java.lang.String preProcessKurzname(java.lang.String neuerWert) {
      return super.preProcessKurzname(neuerWert);
    }

    @Override
    protected void preSetKurzname(java.lang.String alterWert, java.lang.String neuerWert) {
      super.preSetKurzname(alterWert, neuerWert);
    }

    @Override
    protected void postSetKurzname(java.lang.String alterWert, java.lang.String neuerWert) {
      super.postSetKurzname(alterWert, neuerWert);
    }
        
    @javax.persistence.Enumerated(javax.persistence.EnumType.STRING)
      @javax.persistence.Column(name = "PRIVILEGIERUNGS_TYP", nullable = WahlvorschlagConstants.PRIVILEGIERUNGS_TYP_NULLABLE)
    
  protected de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp privilegierungsTyp =  de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp.UNBEKANNT;

  @javax.persistence.Transient
  protected boolean hasChangedPrivilegierungsTyp = false;

  public boolean hasChangedPrivilegierungsTyp(){
    return hasChangedPrivilegierungsTyp;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertPrivilegierungsTyp = false;
     @javax.persistence.Transient
     private transient de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp wertNachLadenPrivilegierungsTyp;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.PRIVILEGIERUNGS_TYP
   */
    @Override   public  de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp getPrivilegierungsTyp() {
        return privilegierungsTyp;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.PRIVILEGIERUNGS_TYP
   *
   * @param privilegierungsTyp
   */
  @Override   public void setPrivilegierungsTyp( de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp privilegierungsTyp) {

       resetTkCache();
                  de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp privilegierungsTypInternal = privilegierungsTyp;
       
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.privilegierungsTyp
      , privilegierungsTypInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedPrivilegierungsTyp |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("privilegierungsTyp");
      }


             if (!isSeitLadenVeraendertPrivilegierungsTyp) {
          isSeitLadenVeraendertPrivilegierungsTyp = thisAttributChanged;
         if (isSeitLadenVeraendertPrivilegierungsTyp){
           wertNachLadenPrivilegierungsTyp=this.privilegierungsTyp;
         }
       }
      

       this.privilegierungsTyp = privilegierungsTypInternal;

         }

        
  @javax.persistence.Temporal(javax.persistence.TemporalType.DATE)
  @javax.persistence.Column(name = "UNTERSTUETZER_ERFASSBAR_AB", nullable = WahlvorschlagConstants.UNTERSTUETZER_ERFASSBAR_AB_NULLABLE, precision=WahlvorschlagConstants.UNTERSTUETZER_ERFASSBAR_AB_PRECISION)
    
  protected java.util.Date unterstuetzerErfassbarAb =  null;

  @javax.persistence.Transient
  protected boolean hasChangedUnterstuetzerErfassbarAb = false;

  public boolean hasChangedUnterstuetzerErfassbarAb(){
    return hasChangedUnterstuetzerErfassbarAb;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertUnterstuetzerErfassbarAb = false;
     @javax.persistence.Transient
     private transient java.util.Date wertNachLadenUnterstuetzerErfassbarAb;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.UNTERSTUETZER_ERFASSBAR_AB
   */
  @javax.annotation.Nullable   @Override   public  java.util.Date getUnterstuetzerErfassbarAb() {
              if (unterstuetzerErfassbarAb == null){
            return null;
          } else {
                          return unterstuetzerErfassbarAb;
          }
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.UNTERSTUETZER_ERFASSBAR_AB
   *
   * @param unterstuetzerErfassbarAb
   */
  @Override   public void setUnterstuetzerErfassbarAb(@javax.annotation.Nullable  java.util.Date unterstuetzerErfassbarAb) {

       resetTkCache();
                  java.util.Date unterstuetzerErfassbarAbInternal = de.ivu.elect.jee.entity.EntityUtil.normalizeDate(unterstuetzerErfassbarAb);
       
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.unterstuetzerErfassbarAb
      , unterstuetzerErfassbarAbInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedUnterstuetzerErfassbarAb |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("unterstuetzerErfassbarAb");
      }


             if (!isSeitLadenVeraendertUnterstuetzerErfassbarAb) {
          isSeitLadenVeraendertUnterstuetzerErfassbarAb = thisAttributChanged;
         if (isSeitLadenVeraendertUnterstuetzerErfassbarAb){
           wertNachLadenUnterstuetzerErfassbarAb=this.unterstuetzerErfassbarAb;
         }
       }
      

       this.unterstuetzerErfassbarAb = unterstuetzerErfassbarAbInternal;

         }

        
      @javax.persistence.Column(name = "UNTERSTUETZER_EXTERN_GUELTIG", nullable = WahlvorschlagConstants.UNTERSTUETZER_EXTERN_GUELTIG_NULLABLE, precision=WahlvorschlagConstants.UNTERSTUETZER_EXTERN_GUELTIG_PRECISION, scale=WahlvorschlagConstants.UNTERSTUETZER_EXTERN_GUELTIG_SCALE)
            
  protected java.lang.Long anzahlUnterstuetzerGeeignetErfasstExtern =  Long.valueOf("0");

  @javax.persistence.Transient
  protected boolean hasChangedAnzahlUnterstuetzerGeeignetErfasstExtern = false;

  public boolean hasChangedAnzahlUnterstuetzerGeeignetErfasstExtern(){
    return hasChangedAnzahlUnterstuetzerGeeignetErfasstExtern;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertAnzahlUnterstuetzerGeeignetErfasstExtern = false;
     @javax.persistence.Transient
     private transient java.lang.Long wertNachLadenAnzahlUnterstuetzerGeeignetErfasstExtern;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.UNTERSTUETZER_EXTERN_GUELTIG
   */
    @Override   public  java.lang.Long getAnzahlUnterstuetzerGeeignetErfasstExtern() {
        return anzahlUnterstuetzerGeeignetErfasstExtern;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.UNTERSTUETZER_EXTERN_GUELTIG
   *
   * @param anzahlUnterstuetzerGeeignetErfasstExtern
   */
  @Override   public void setAnzahlUnterstuetzerGeeignetErfasstExtern( java.lang.Long anzahlUnterstuetzerGeeignetErfasstExtern) {

       resetTkCache();
                  java.lang.Long anzahlUnterstuetzerGeeignetErfasstExternInternal = anzahlUnterstuetzerGeeignetErfasstExtern;
       
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.anzahlUnterstuetzerGeeignetErfasstExtern
      , anzahlUnterstuetzerGeeignetErfasstExternInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedAnzahlUnterstuetzerGeeignetErfasstExtern |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("anzahlUnterstuetzerGeeignetErfasstExtern");
      }


             if (!isSeitLadenVeraendertAnzahlUnterstuetzerGeeignetErfasstExtern) {
          isSeitLadenVeraendertAnzahlUnterstuetzerGeeignetErfasstExtern = thisAttributChanged;
         if (isSeitLadenVeraendertAnzahlUnterstuetzerGeeignetErfasstExtern){
           wertNachLadenAnzahlUnterstuetzerGeeignetErfasstExtern=this.anzahlUnterstuetzerGeeignetErfasstExtern;
         }
       }
      

       this.anzahlUnterstuetzerGeeignetErfasstExtern = anzahlUnterstuetzerGeeignetErfasstExternInternal;

         }

        
      @javax.persistence.Column(name = "UNTERSTUETZER_EXTERN_UNGUELTIG", nullable = WahlvorschlagConstants.UNTERSTUETZER_EXTERN_UNGUELTIG_NULLABLE, precision=WahlvorschlagConstants.UNTERSTUETZER_EXTERN_UNGUELTIG_PRECISION, scale=WahlvorschlagConstants.UNTERSTUETZER_EXTERN_UNGUELTIG_SCALE)
            
  protected java.lang.Long anzahlUnterstuetzerNichtGeeignetErfasstExtern =  Long.valueOf("0");

  @javax.persistence.Transient
  protected boolean hasChangedAnzahlUnterstuetzerNichtGeeignetErfasstExtern = false;

  public boolean hasChangedAnzahlUnterstuetzerNichtGeeignetErfasstExtern(){
    return hasChangedAnzahlUnterstuetzerNichtGeeignetErfasstExtern;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertAnzahlUnterstuetzerNichtGeeignetErfasstExtern = false;
     @javax.persistence.Transient
     private transient java.lang.Long wertNachLadenAnzahlUnterstuetzerNichtGeeignetErfasstExtern;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.UNTERSTUETZER_EXTERN_UNGUELTIG
   */
    @Override   public  java.lang.Long getAnzahlUnterstuetzerNichtGeeignetErfasstExtern() {
        return anzahlUnterstuetzerNichtGeeignetErfasstExtern;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.UNTERSTUETZER_EXTERN_UNGUELTIG
   *
   * @param anzahlUnterstuetzerNichtGeeignetErfasstExtern
   */
  @Override   public void setAnzahlUnterstuetzerNichtGeeignetErfasstExtern( java.lang.Long anzahlUnterstuetzerNichtGeeignetErfasstExtern) {

       resetTkCache();
                  java.lang.Long anzahlUnterstuetzerNichtGeeignetErfasstExternInternal = anzahlUnterstuetzerNichtGeeignetErfasstExtern;
       
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.anzahlUnterstuetzerNichtGeeignetErfasstExtern
      , anzahlUnterstuetzerNichtGeeignetErfasstExternInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedAnzahlUnterstuetzerNichtGeeignetErfasstExtern |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("anzahlUnterstuetzerNichtGeeignetErfasstExtern");
      }


             if (!isSeitLadenVeraendertAnzahlUnterstuetzerNichtGeeignetErfasstExtern) {
          isSeitLadenVeraendertAnzahlUnterstuetzerNichtGeeignetErfasstExtern = thisAttributChanged;
         if (isSeitLadenVeraendertAnzahlUnterstuetzerNichtGeeignetErfasstExtern){
           wertNachLadenAnzahlUnterstuetzerNichtGeeignetErfasstExtern=this.anzahlUnterstuetzerNichtGeeignetErfasstExtern;
         }
       }
      

       this.anzahlUnterstuetzerNichtGeeignetErfasstExtern = anzahlUnterstuetzerNichtGeeignetErfasstExternInternal;

         }

        
    @javax.persistence.Enumerated(javax.persistence.EnumType.STRING)
      @javax.persistence.Column(name = "WAHLVORSCHLAG_STATUS", nullable = WahlvorschlagConstants.WAHLVORSCHLAG_STATUS_NULLABLE)
    
  protected de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus wahlvorschlagStatus =  de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus.OFFEN;

  @javax.persistence.Transient
  protected boolean hasChangedWahlvorschlagStatus = false;

  public boolean hasChangedWahlvorschlagStatus(){
    return hasChangedWahlvorschlagStatus;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertWahlvorschlagStatus = false;
     @javax.persistence.Transient
     private transient de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus wertNachLadenWahlvorschlagStatus;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.WAHLVORSCHLAG_STATUS
   */
    @Override   public  de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus getWahlvorschlagStatus() {
        return wahlvorschlagStatus;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.WAHLVORSCHLAG_STATUS
   *
   * @param wahlvorschlagStatus
   */
  @Override   public void setWahlvorschlagStatus( de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus wahlvorschlagStatus) {

       resetTkCache();
                  de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus wahlvorschlagStatusInternal = wahlvorschlagStatus;
       
                de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus alterWert = getWahlvorschlagStatus();
         wahlvorschlagStatusInternal = preProcessWahlvorschlagStatus(wahlvorschlagStatusInternal);
         preSetWahlvorschlagStatus(alterWert, wahlvorschlagStatusInternal);
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.wahlvorschlagStatus
      , wahlvorschlagStatusInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedWahlvorschlagStatus |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("wahlvorschlagStatus");
      }


             if (!isSeitLadenVeraendertWahlvorschlagStatus) {
          isSeitLadenVeraendertWahlvorschlagStatus = thisAttributChanged;
         if (isSeitLadenVeraendertWahlvorschlagStatus){
           wertNachLadenWahlvorschlagStatus=this.wahlvorschlagStatus;
         }
       }
      

       this.wahlvorschlagStatus = wahlvorschlagStatusInternal;

                postSetWahlvorschlagStatus(alterWert, wahlvorschlagStatusInternal);
         }

  
    @Override
    protected de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus preProcessWahlvorschlagStatus(de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus neuerWert) {
      return super.preProcessWahlvorschlagStatus(neuerWert);
    }

    @Override
    protected void preSetWahlvorschlagStatus(de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus alterWert, de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus neuerWert) {
      super.preSetWahlvorschlagStatus(alterWert, neuerWert);
    }

    @Override
    protected void postSetWahlvorschlagStatus(de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus alterWert, de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus neuerWert) {
      super.postSetWahlvorschlagStatus(alterWert, neuerWert);
    }
        
  @javax.persistence.Temporal(javax.persistence.TemporalType.TIMESTAMP)
  @javax.persistence.Column(name = "ZEITPUNKT_DER_EINREICHUNG", nullable = WahlvorschlagConstants.ZEITPUNKT_DER_EINREICHUNG_NULLABLE, precision=WahlvorschlagConstants.ZEITPUNKT_DER_EINREICHUNG_PRECISION)
    
  protected java.util.Date zeitpunktDerEinreichung =  null;

  @javax.persistence.Transient
  protected boolean hasChangedZeitpunktDerEinreichung = false;

  public boolean hasChangedZeitpunktDerEinreichung(){
    return hasChangedZeitpunktDerEinreichung;
  }
       @javax.persistence.Transient
     private transient boolean isSeitLadenVeraendertZeitpunktDerEinreichung = false;
     @javax.persistence.Transient
     private transient java.util.Date wertNachLadenZeitpunktDerEinreichung;
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.ZEITPUNKT_DER_EINREICHUNG
   */
  @javax.annotation.Nullable   @Override   public  java.util.Date getZeitpunktDerEinreichung() {
              if (zeitpunktDerEinreichung == null){
            return null;
          } else {
                          return zeitpunktDerEinreichung;
          }
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.ZEITPUNKT_DER_EINREICHUNG
   *
   * @param zeitpunktDerEinreichung
   */
  @Override   public void setZeitpunktDerEinreichung(@javax.annotation.Nullable  java.util.Date zeitpunktDerEinreichung) {

       resetTkCache();
                  java.util.Date zeitpunktDerEinreichungInternal = de.ivu.elect.jee.entity.EntityUtil.normalizeDateTime(zeitpunktDerEinreichung);
       
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.zeitpunktDerEinreichung
      , zeitpunktDerEinreichungInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedZeitpunktDerEinreichung |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("zeitpunktDerEinreichung");
      }


             if (!isSeitLadenVeraendertZeitpunktDerEinreichung) {
          isSeitLadenVeraendertZeitpunktDerEinreichung = thisAttributChanged;
         if (isSeitLadenVeraendertZeitpunktDerEinreichung){
           wertNachLadenZeitpunktDerEinreichung=this.zeitpunktDerEinreichung;
         }
       }
      

       this.zeitpunktDerEinreichung = zeitpunktDerEinreichungInternal;

         }

        
  @javax.persistence.Column(name = "ZUSATZBEZEICHNUNG", nullable = WahlvorschlagConstants.ZUSATZBEZEICHNUNG_NULLABLE, length=WahlvorschlagConstants.ZUSATZBEZEICHNUNG_MAX_LENGTH)
        
  protected java.lang.String zusatzbezeichnung =  null;

  @javax.persistence.Transient
  protected boolean hasChangedZusatzbezeichnung = false;

  public boolean hasChangedZusatzbezeichnung(){
    return hasChangedZusatzbezeichnung;
  }
  
  /**
   * 
   *
   * getter for WAHLVORSCHLAG.ZUSATZBEZEICHNUNG
   */
  @javax.annotation.Nullable   @Override   public  java.lang.String getZusatzbezeichnung() {
        return zusatzbezeichnung;
      }

  /**
   * 
   *
   * setter for WAHLVORSCHLAG.ZUSATZBEZEICHNUNG
   *
   * @param zusatzbezeichnung
   */
  @Override   public void setZusatzbezeichnung(@javax.annotation.Nullable  java.lang.String zusatzbezeichnung) {

       resetTkCache();
                  
                          java.lang.String zusatzbezeichnungInternal = de.ivu.elect.jee.entity.EntityUtil.trimToNullOrMaxLength(zusatzbezeichnung, WahlvorschlagConstants.ZUSATZBEZEICHNUNG_MAX_LENGTH, getId(), getClass());
                  
       
      boolean thisAttributChanged =
      !de.ivu.elect.jee.entity.EntityUtil.compareObjects(this.zusatzbezeichnung
      , zusatzbezeichnungInternal);

      attributeChanged |= thisAttributChanged;

      hasChangedZusatzbezeichnung |= thisAttributChanged;

      if (thisAttributChanged) {
      markDirty("zusatzbezeichnung");
      }


      

       this.zusatzbezeichnung = zusatzbezeichnungInternal;

         }

    
/**
 * Beziehungen N:1 unidirektional
 */

/**
 * Beziehungen N:1 bidirektional
 */
  /**
   * Beziehung N:1 (bidirektional) zu GruppeImGebiet
   */
  @javax.persistence.ManyToOne(fetch =  javax.persistence.FetchType.LAZY , optional=false, cascade = {javax.persistence.CascadeType.PERSIST})
  @javax.persistence.JoinColumns(@javax.persistence.JoinColumn(name = "GRUPPE_IM_GEBIET_ID", referencedColumnName="GRUPPE_IM_GEBIET_ID"))
  protected de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet gruppeImGebiet;

  /**
   * 
   */
  @Override
  public void setGruppeImGebiet( de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet gruppeImGebiet){
    resetTkCache();

    try {
      if (!updateRelationship){
        updateRelationship = true;

    

        if (gruppeImGebiet == null){
          // andere Seite der Beziehung aktualisieren wenn vorher nicht null
          if (this.gruppeImGebiet != null){
            this.gruppeImGebiet.removeWahlvorschlagByGruppeImGebiet(this);
          }
        } else {
          // andere Seite der Beziehung aktualisieren
          gruppeImGebiet.addWahlvorschlagByGruppeImGebiet(this);
        }
        this.gruppeImGebiet = gruppeImGebiet;
    
      }
    } finally {
      updateRelationship = false;
    }
  }


/**
* 
* Kein Update der bidirektionalen Beziehung - schneller, aber mit Vorsicht zu genießen
*/
@Override
public void setGruppeImGebietOhneUpdateBeziehung( de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet gruppeImGebiet){
    resetTkCache();
        this.gruppeImGebiet = gruppeImGebiet;
    }

  /**
   * 
   */
    @Override
  public de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet getGruppeImGebiet(){
    return this.gruppeImGebiet;
  }


  /**
   * Beziehungen 1:N unidirektional (nicht unterstuetzt)
   */

  /**
   * Beziehungen 1:N bidirektional
   */

  /**
   * Beziehungen N:M bidirektional nicht selbstreferenzierend
   */


  /**
   * Beziehungen N:M bidirektional selbstreferenzierend
   */
  

  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("Wahlvorschlag:");
    sb.append(getId());
    sb.append(" (TK: ");
    try {
      sb.append(getTk());
    } catch (Exception e) {
      sb.append(e.getMessage());
    }
    sb.append(")");
    return sb.toString();
}



  /**
   * Kopiert alle Attribute (ausser PK und Version) und UNIDIREKTIONALE n:1-Beziehungen in uebergebene Entitaet.
   *
   * @param other
   *
   * @deprecated Sollte nur mit Bedacht genutzt werden, da hier auch die Beziehungen kopiert werden. Deswegen markiert
   *             als Deprecated.
   */
  @Deprecated
  protected void copyEntity(Wahlvorschlag other){
                                               other.kennwort = this.kennwort;
                                other.kurzname = this.kurzname;
                                other.privilegierungsTyp = this.privilegierungsTyp;
                                other.unterstuetzerErfassbarAb = this.unterstuetzerErfassbarAb;
                                other.anzahlUnterstuetzerGeeignetErfasstExtern = this.anzahlUnterstuetzerGeeignetErfasstExtern;
                                other.anzahlUnterstuetzerNichtGeeignetErfasstExtern = this.anzahlUnterstuetzerNichtGeeignetErfasstExtern;
                                other.wahlvorschlagStatus = this.wahlvorschlagStatus;
                                other.zeitpunktDerEinreichung = this.zeitpunktDerEinreichung;
                                other.zusatzbezeichnung = this.zusatzbezeichnung;
           
  other.setGruppeImGebiet(this.getGruppeImGebiet());
    if (this.transientContext != null && !this.transientContext.isEmpty()) {
      other.getTransientContext().putAll(this.transientContext);
    }
  }



    @Override
    public void copyEntityAttributesToOtherEntity(de.ivu.elect.jee.entity.Entity other) {
      if (other==null){
        return;
      }
      if (other.isInstanceOf(Wahlvorschlag.class)){
        copyEntityAttributesUsingSetter((Wahlvorschlag) other.castTo(Wahlvorschlag.class).getEntity());
      } else {
        throw new IllegalArgumentException("Keine Instanz von Wahlvorschlag: " + other);
      }
    }

  /**
  * Kopiert alle Attribute (ausser PK und Version)  in uebergebene Entitaet.
  *
  */
  public void copyEntityAttributesUsingSetter(Wahlvorschlag other){
                           other.setKennwort(this.kennwort);
                  other.setKurzname(this.kurzname);
                  other.setPrivilegierungsTyp(this.privilegierungsTyp);
                  other.setUnterstuetzerErfassbarAb(this.unterstuetzerErfassbarAb);
                  other.setAnzahlUnterstuetzerGeeignetErfasstExtern(this.anzahlUnterstuetzerGeeignetErfasstExtern);
                  other.setAnzahlUnterstuetzerNichtGeeignetErfasstExtern(this.anzahlUnterstuetzerNichtGeeignetErfasstExtern);
                  other.setWahlvorschlagStatus(this.wahlvorschlagStatus);
                  other.setZeitpunktDerEinreichung(this.zeitpunktDerEinreichung);
                  other.setZusatzbezeichnung(this.zusatzbezeichnung);
           if (this.transientContext != null && !this.transientContext.isEmpty()) {
      other.getTransientContext().putAll(this.transientContext);
    }
  }


  /**
   * Kopiert alle veränderten Attribute (ausser PK, CustomData, wenn vorhanden und Version) in uebergebene Entitaet.
   *
   */
  public void copyChangedEntityAttributesUsingSetter(Wahlvorschlag other){
                                        if (hasChangedKennwort) {
        other.setKennwort(this.kennwort);
      }
                             if (hasChangedKurzname) {
        other.setKurzname(this.kurzname);
      }
                             if (hasChangedPrivilegierungsTyp) {
        other.setPrivilegierungsTyp(this.privilegierungsTyp);
      }
                             if (hasChangedUnterstuetzerErfassbarAb) {
        other.setUnterstuetzerErfassbarAb(this.unterstuetzerErfassbarAb);
      }
                             if (hasChangedAnzahlUnterstuetzerGeeignetErfasstExtern) {
        other.setAnzahlUnterstuetzerGeeignetErfasstExtern(this.anzahlUnterstuetzerGeeignetErfasstExtern);
      }
                             if (hasChangedAnzahlUnterstuetzerNichtGeeignetErfasstExtern) {
        other.setAnzahlUnterstuetzerNichtGeeignetErfasstExtern(this.anzahlUnterstuetzerNichtGeeignetErfasstExtern);
      }
                             if (hasChangedWahlvorschlagStatus) {
        other.setWahlvorschlagStatus(this.wahlvorschlagStatus);
      }
                             if (hasChangedZeitpunktDerEinreichung) {
        other.setZeitpunktDerEinreichung(this.zeitpunktDerEinreichung);
      }
                             if (hasChangedZusatzbezeichnung) {
        other.setZusatzbezeichnung(this.zusatzbezeichnung);
      }
             }





    @javax.persistence.Transient
    private transient WahlvorschlagTK tkCache;

    protected void resetTkCache() {
        tkCache = null;
    }

    public WahlvorschlagTK getWahlvorschlagTK(){
    if (tkCache==null) {
    tkCache = new WahlvorschlagTK(

getDiscriminator()
,   (getGruppeImGebiet() == null) ? null : getGruppeImGebiet().getGruppeImGebietTK()


  );}
  return tkCache;
}
    @Override
    public de.ivu.elect.jee.entity.tk.EntityTK getTk() {
       return getWahlvorschlagTK();
    }

  @Override
  public WahlvorschlagUK getUk(){
    return getWahlvorschlagUK();
  }

  @Override
  public Class< ? > getEntityClass() {
    return Wahlvorschlag.class;
  }

public WahlvorschlagUK getWahlvorschlagUK(){

   return  new WahlvorschlagUK(

getDiscriminator()
,     getGruppeImGebiet()==null?null:getGruppeImGebiet().getGruppeImGebietUK()


  );
}

  @javax.persistence.Transient
  private transient WahlvorschlagProperties properties;

  public WahlvorschlagProperties getProperties(){
    if (properties == null) {
      properties = new WahlvorschlagProperties(this);
    }
    return properties;
  }

  /**
   * @deprecated getProperties() verwenden.
   */
  @Deprecated
  public WahlvorschlagProperties getWahlvorschlagProperties(){
    return getProperties();
  }

  @Override
  public String getEntityTechnicalName() {
    return WahlvorschlagConstants.MESSAGE_KEY_ENTITY_EINZAHL;
  }

  @Override
  public boolean isAenderungenProtokollieren(){
    
    return true;
  }


    @Override
   public void setProtokollierteAttributeMitWerten(java.util.Map<String, de.ivu.elect.jee.protokollierung.AttributWertVorher> werteVorher) {
             
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_KENNWORT_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_KENNWORT_EINZAHL);

        kennwort =
     vorher.getAttributTyp().getValueAsString(vorher.getWertVorher());
          }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_KURZNAME_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_KURZNAME_EINZAHL);

        kurzname =
     vorher.getAttributTyp().getValueAsString(vorher.getWertVorher());
          }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_PRIVILEGIERUNGS_TYP_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_PRIVILEGIERUNGS_TYP_EINZAHL);

        privilegierungsTyp =
     (de.ivu.elect.business.wahlvorschlag.entity.PrivilegierungsTyp) vorher.getAttributTyp().getValueAsEnum(vorher.getWertVorher());
          }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_ERFASSBAR_AB_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_ERFASSBAR_AB_EINZAHL);

        unterstuetzerErfassbarAb =
     vorher.getAttributTyp().getValueAsDate(vorher.getWertVorher());
          }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_GUELTIG_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_GUELTIG_EINZAHL);

        anzahlUnterstuetzerGeeignetErfasstExtern =
                        vorher.getAttributTyp().getValueAsLong(vorher.getWertVorher());
                  }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_UNGUELTIG_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_UNGUELTIG_EINZAHL);

        anzahlUnterstuetzerNichtGeeignetErfasstExtern =
                        vorher.getAttributTyp().getValueAsLong(vorher.getWertVorher());
                  }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_WAHLVORSCHLAG_STATUS_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_WAHLVORSCHLAG_STATUS_EINZAHL);

        wahlvorschlagStatus =
     (de.ivu.elect.business.wahlvorschlag.entity.WahlvorschlagStatus) vorher.getAttributTyp().getValueAsEnum(vorher.getWertVorher());
          }

            
      if (werteVorher.containsKey(WahlvorschlagConstants.MESSAGE_KEY_ZEITPUNKT_DER_EINREICHUNG_EINZAHL)){
        de.ivu.elect.jee.protokollierung.AttributWertVorher vorher = werteVorher.get(WahlvorschlagConstants.MESSAGE_KEY_ZEITPUNKT_DER_EINREICHUNG_EINZAHL);

        zeitpunktDerEinreichung =
     vorher.getAttributTyp().getValueAsDate(vorher.getWertVorher());
          }

                        }

  @Override
  public java.util.Map<String, de.ivu.elect.jee.protokollierung.VorherNachherWert> getProtokollierteAttributeMitWerten() {
    java.util.Map<String,de.ivu.elect.jee.protokollierung.VorherNachherWert> result;
        result = createEmptyProtokollierteAttributeMitWertenMap();
                                            if (isSeitLadenVeraendertKennwort) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_KENNWORT_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
         de.ivu.elect.jee.protokollierung.AttributTyp.STRING
                , wertNachLadenKennwort , kennwort));
    }
                            if (isSeitLadenVeraendertKurzname) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_KURZNAME_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
         de.ivu.elect.jee.protokollierung.AttributTyp.STRING
                , wertNachLadenKurzname , kurzname));
    }
                            if (isSeitLadenVeraendertPrivilegierungsTyp) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_PRIVILEGIERUNGS_TYP_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
         de.ivu.elect.jee.protokollierung.AttributTyp.ENUM
                , wertNachLadenPrivilegierungsTyp , privilegierungsTyp));
    }
                            if (isSeitLadenVeraendertUnterstuetzerErfassbarAb) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_ERFASSBAR_AB_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
         de.ivu.elect.jee.protokollierung.AttributTyp.DATE
                , wertNachLadenUnterstuetzerErfassbarAb , unterstuetzerErfassbarAb));
    }
                            if (isSeitLadenVeraendertAnzahlUnterstuetzerGeeignetErfasstExtern) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_GUELTIG_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
                                    de.ivu.elect.jee.protokollierung.AttributTyp.LONG
                            , wertNachLadenAnzahlUnterstuetzerGeeignetErfasstExtern , anzahlUnterstuetzerGeeignetErfasstExtern));
    }
                            if (isSeitLadenVeraendertAnzahlUnterstuetzerNichtGeeignetErfasstExtern) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_UNGUELTIG_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
                                    de.ivu.elect.jee.protokollierung.AttributTyp.LONG
                            , wertNachLadenAnzahlUnterstuetzerNichtGeeignetErfasstExtern , anzahlUnterstuetzerNichtGeeignetErfasstExtern));
    }
                            if (isSeitLadenVeraendertWahlvorschlagStatus) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_WAHLVORSCHLAG_STATUS_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
         de.ivu.elect.jee.protokollierung.AttributTyp.ENUM
                , wertNachLadenWahlvorschlagStatus , wahlvorschlagStatus));
    }
                            if (isSeitLadenVeraendertZeitpunktDerEinreichung) {
      result.put(WahlvorschlagConstants.MESSAGE_KEY_ZEITPUNKT_DER_EINREICHUNG_EINZAHL, new de.ivu.elect.jee.protokollierung.VorherNachherWert(
         de.ivu.elect.jee.protokollierung.AttributTyp.TIMESTAMP
                , wertNachLadenZeitpunktDerEinreichung , zeitpunktDerEinreichung));
    }
                                    return result;
  }

  @Override
  public void resetProtokollierteAttribute() {
                                      isSeitLadenVeraendertKennwort = false;
      wertNachLadenKennwort = null;
                          isSeitLadenVeraendertKurzname = false;
      wertNachLadenKurzname = null;
                          isSeitLadenVeraendertPrivilegierungsTyp = false;
      wertNachLadenPrivilegierungsTyp = null;
                          isSeitLadenVeraendertUnterstuetzerErfassbarAb = false;
      wertNachLadenUnterstuetzerErfassbarAb = null;
                          isSeitLadenVeraendertAnzahlUnterstuetzerGeeignetErfasstExtern = false;
      wertNachLadenAnzahlUnterstuetzerGeeignetErfasstExtern = null;
                          isSeitLadenVeraendertAnzahlUnterstuetzerNichtGeeignetErfasstExtern = false;
      wertNachLadenAnzahlUnterstuetzerNichtGeeignetErfasstExtern = null;
                          isSeitLadenVeraendertWahlvorschlagStatus = false;
      wertNachLadenWahlvorschlagStatus = null;
                          isSeitLadenVeraendertZeitpunktDerEinreichung = false;
      wertNachLadenZeitpunktDerEinreichung = null;
                                   }

  @Override
  public  java.util.List<de.ivu.elect.jee.entity.EntityFachlichAbhaengigNode> getFachlichAbhaengigeEntitaeten(){
            java.util.List<de.ivu.elect.jee.entity.EntityFachlichAbhaengigNode> result = new java.util.ArrayList<>();
                    if (gruppeImGebiet != null) {
          if (!result.contains(gruppeImGebiet)) {
            de.ivu.elect.jee.entity.EntityFachlichAbhaengigNode node = new de.ivu.elect.jee.entity.EntityFachlichAbhaengigNode(WahlvorschlagConstants.MESSAGE_KEY_GRUPPE_IM_GEBIET_ID_EINZAHL, gruppeImGebiet);
            result.add(node);
            node.getChildren().addAll(gruppeImGebiet.getFachlichAbhaengigeEntitaeten());
          }
        }
            return result;
  }

        
            protected String getInitialDiscriminator() {
              return "WAHLVORSCHLAG";
            }

            @Override
            public boolean isInstanceOf(Class<?> clazz) {
            return clazz.isInstance(this);
            }


            @Override
            public <E> de.ivu.elect.jee.entity.EntityContainer<E> castTo(Class<E> clazz) {
                return new de.ivu.elect.jee.entity.EntityContainer<>((E)this); // EntityContainer ist notwendig, da sonst von Hibernate die Entität wieder durch ihren Proxy ersetzt wird...
            }

  public boolean isPersistent() {
    return getId() != null;
  }


   private static final String BASE_CLASS_NAME = "Wahlvorschlag";
   @Override
   public String getBaseClassName() {
     return BASE_CLASS_NAME;
   }


    @Override
    public boolean equals(Object obj) {
    if (obj == null) {
    return false;
    }

    if (this==obj) {
    return true;
    }


    if (id != null) {
      try {
        return id.longValue() == ((de.ivu.elect.jee.entity.Entity) obj).getId().longValue() && BASE_CLASS_NAME.equals(((de.ivu.elect.jee.entity.Entity) obj).getBaseClassName());
      } catch (Exception ignored) {
        // do nothing
        return false;
      }
    }
   return super.equals(obj);
    }

  @javax.persistence.Transient
  private transient boolean hashCodeBerechnet = false;

  @javax.persistence.Transient
  private transient int hashCode = 0;


  @Deprecated // nur in Unit-Tests verwenden(!)
  public void resetHashCode() {
    hashCodeBerechnet = false;
    hashCode = 0;
  }

  @Override
    public int hashCode() {
      if (hashCodeBerechnet) {
      return hashCode;
    }

    if (id == null) {
      hashCode = super.hashCode();
    } else {
      hashCode = id.hashCode();
    }

    hashCodeBerechnet = true;

    return hashCode;

    }


                            @javax.persistence.Transient
                private transient java.util.Set
            <String> dirtyProperties = null;

                protected void markDirty(String property) {
            
          }

          public java.util.Set
      <String> getDirtyProperties() {
          if (dirtyProperties==null){
          dirtyProperties = new java.util.HashSet<>();
          }
          return dirtyProperties;
          }

          public void clearDirtyProperties(){
          dirtyProperties = null;
          }
          public boolean isHibernateDirty() {
            return dirtyProperties!=null;
          }

      
                public void resetValidation() {
        
    validationResult = null;
        }

        @javax.persistence.Transient
        private transient java.util.Set<de.ivu.elect.jee.entity.EntityConstraintViolation> validationResult;

                    public java.util.Set<de.ivu.elect.jee.entity.EntityConstraintViolation> validateEntity() {
            if (validationResult==null) {
               validationResult  = new java.util.HashSet<>();
                                                                                                           de.ivu.elect.jee.entity.EntityConstraintCheck.checkStringLength(WahlvorschlagConstants.DISCRIMINATOR_MAX_LENGTH ,  discriminator, this, WahlvorschlagConstants.MESSAGE_KEY_DISCRIMINATOR_EINZAHL, validationResult);
                                                                                                   de.ivu.elect.jee.entity.EntityConstraintCheck.checkStringLength(WahlvorschlagConstants.KENNWORT_MAX_LENGTH ,  kennwort, this, WahlvorschlagConstants.MESSAGE_KEY_KENNWORT_EINZAHL, validationResult);
                                                                                                   de.ivu.elect.jee.entity.EntityConstraintCheck.checkStringLength(WahlvorschlagConstants.KURZNAME_MAX_LENGTH ,  kurzname, this, WahlvorschlagConstants.MESSAGE_KEY_KURZNAME_EINZAHL, validationResult);
                                                           de.ivu.elect.jee.entity.EntityConstraintCheck.checkNotNull(privilegierungsTyp, this, WahlvorschlagConstants.MESSAGE_KEY_PRIVILEGIERUNGS_TYP_EINZAHL, validationResult);
                                                                                                                                                    de.ivu.elect.jee.entity.EntityConstraintCheck.checkNotNull(anzahlUnterstuetzerGeeignetErfasstExtern, this, WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_GUELTIG_EINZAHL, validationResult);
                                                                          de.ivu.elect.jee.entity.EntityConstraintCheck.checkValueRange(WahlvorschlagConstants.UNTERSTUETZER_EXTERN_GUELTIG_MAX_VALUE, WahlvorschlagConstants.UNTERSTUETZER_EXTERN_GUELTIG_MIN_VALUE, anzahlUnterstuetzerGeeignetErfasstExtern, this, WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_GUELTIG_EINZAHL, validationResult);
                                                           de.ivu.elect.jee.entity.EntityConstraintCheck.checkNotNull(anzahlUnterstuetzerNichtGeeignetErfasstExtern, this, WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_UNGUELTIG_EINZAHL, validationResult);
                                                                          de.ivu.elect.jee.entity.EntityConstraintCheck.checkValueRange(WahlvorschlagConstants.UNTERSTUETZER_EXTERN_UNGUELTIG_MAX_VALUE, WahlvorschlagConstants.UNTERSTUETZER_EXTERN_UNGUELTIG_MIN_VALUE, anzahlUnterstuetzerNichtGeeignetErfasstExtern, this, WahlvorschlagConstants.MESSAGE_KEY_UNTERSTUETZER_EXTERN_UNGUELTIG_EINZAHL, validationResult);
                                                           de.ivu.elect.jee.entity.EntityConstraintCheck.checkNotNull(wahlvorschlagStatus, this, WahlvorschlagConstants.MESSAGE_KEY_WAHLVORSCHLAG_STATUS_EINZAHL, validationResult);
                                                                                                                                                                                            de.ivu.elect.jee.entity.EntityConstraintCheck.checkStringLength(WahlvorschlagConstants.ZUSATZBEZEICHNUNG_MAX_LENGTH ,  zusatzbezeichnung, this, WahlvorschlagConstants.MESSAGE_KEY_ZUSATZBEZEICHNUNG_EINZAHL, validationResult);
                                    }
             return validationResult;
        }

            
        @javax.persistence.Transient
        protected transient java.util.Map<String, Object> transientContext;

        @Override
        public java.util.Map<String, Object> getTransientContext() {
          if (transientContext == null) {
             transientContext = new java.util.HashMap<>();
          }
        return transientContext;

        }
                              }
