title: How to use a sequence generator for a non ID field?
body: <pre><code>public class SequenceControlNumber extends SequenceGenerator {
  
      private static final Logger log =
          LoggerFactory.getLogger(SequenceGenerator.class);
  
      @Override
      public Serializable generate(SessionImplementor session, Object obj) {
          Connection connection = session.connection();
          try {
              PreparedStatement st = connection.prepareStatement
                     ("SELECT nextval ('sequencecontrolnumber') as nextval");
              try {
                  ResultSet rs = st.executeQuery();
                  try {
                      rs.next();
                      int currentVall = rs.getInt("sequencecontrolnumber");
                      int result = 0;
                      if(currentVall &lt;255){
                          result = currentVall +1;
                      }
                      if ( log.isDebugEnabled() ) {
                          log.debug("Sequence identifier generated: " + result);
                      }
                      return result;
                  }
                  finally {
                      rs.close();
                  }
              }
              finally {
                  session.getBatcher().closeStatement(st);
              }
          }
          catch (SQLException sqle) {
              throw JDBCExceptionHelper.convert(
                      session.getFactory().getSQLExceptionConverter(),
                      sqle,"could not get next sequence value");
          }
      }
  
  }
  </code></pre>
  
  <p>In my model class this is my annotation:</p>
  
  <pre><code>@GenericGenerator(name="seq_id",
          strategy="br.com.otgmobile.service.dao.SequenceControlNumber")
  @GeneratedValue(generator="seq_id")
  @Column(name="sequencecontrolnumber",unique=false, nullable=false)
  private Integer sequenceControlNumber;
  </code></pre>
  
  <p>but I keep getting a a property value exception.</p>
  
  <pre><code>javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.otgmobile.model.niagarahw06.ComandoNiagaraHw06.sequenceControlNumber
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1179)
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1112)
  at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1118)
  at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:618)
  at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
  at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  at java.lang.reflect.Method.invoke(Method.java:601)
  at org.springframework.orm.jpa.SharedEntityManagerCreator$SharedEntityManagerInvocationHandler.invoke(SharedEntityManagerCreator.java:240)
  at $Proxy33.persist(Unknown Source)
  at br.com.otgmobile.service.dao.ComandoNiagaraHw06DAO.add(ComandoNiagaraHw06DAO.java:57)
  at br.com.otgmobile.service.dao.ComandoNiagaraHw06DAO$$FastClassByCGLIB$$e19cf51d.invoke(&lt;generated&gt;)
  at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
  at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
  at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
  at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
  at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
  at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
  at br.com.otgmobile.service.dao.ComandoNiagaraHw06DAO$$EnhancerByCGLIB$$69ccb4e4.add(&lt;generated&gt;)
  at br.com.otgmobile.server.NiagaraSocketManager.testPersistComandos(NiagaraSocketManager.java:100)
  at br.com.otgmobile.server.NiagaraSocketManager.start(NiagaraSocketManager.java:45)
  at br.com.otgmobile.server.NiagaraDaemon.run(NiagaraDaemon.java:25)
  at java.lang.Thread.run(Thread.java:722)
  
  Caused by: org.hibernate.PropertyValueException: not-null property references a null or transient value: br.com.otgmobile.model.niagarahw06.ComandoNiagaraHw06.sequenceControlNumber
  at org.hibernate.engine.Nullability.checkNullability(Nullability.java:101)
  at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:313)
  at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:204)
  at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:144)
  at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:69)
  at org.hibernate.event.def.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:179)
  at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135)
  at org.hibernate.event.def.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:61)
  at org.hibernate.impl.SessionImpl.firePersist(SessionImpl.java:800)
  at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:774)
  at org.hibernate.impl.SessionImpl.persist(SessionImpl.java:778)
  at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:612)
  </code></pre>