JPA + Hibernate @GeneratedValue

Oi Pessoal,

Preciso fazer com que um campo seja gerado automaticamente quando salvo meu objeto. Queria fazer a mesma coisa q o Id faz só que o campo precisa zerar quando mudamos de ano.

@Entity
@SequenceGenerator(
	    name="etiquetaSeq",
	    sequenceName="SEQ_ETIQUETA"
)
public class Etiqueta implements Serializable {
  @Id @GeneratedValue(strategy=GenerationType.AUTO)
  private Long id;
  @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="etiquetaSeq") 
  private Long numero;
  private Long ano;
  // Getters/Setters
}

Pode usar @GeneratedValue(strategy=GenerationType.SEQUENCE, generator=“etiquetaSeq”) na propriedade ou existe ou maneira de fazer? Se pode, como zerar o valor a cada ano…

Bom, tô aprendendo ainda… mais qualquer dica vale.

Obrigado,
Cristiano.

Eu vi essa resposta no javafree.org… e fiz esse código que funcionou. Só que eu queria que tivesse um campo Id e outro Numero… Será que vou ter de criar uma trigger para fazer isso :?:

@Entity
@GenericGenerator( 
	name = "etiquetaGenerator", 
	strategy = "IdEtiquetaGenerator"
)
public class Etiqueta {
	
	@Id
	@GeneratedValue(generator = "etiquetaGenerator")
	private String numero;
	
	private Date dataEmissao;

	public Date getDataEmissao() {
		return dataEmissao;
	}

	public void setDataEmissao(Date dataEmissao) {
		this.dataEmissao = dataEmissao;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

}
public class IdEtiquetaGenerator implements IdentifierGenerator {
	public IdEtiquetaGenerator() {
	}

	public Serializable generate(SessionImplementor session, Object object)
			throws HibernateException {
		Session sess = session.getFactory().openSession();
		String key = null;

		synchronized (this) {
			String exercicio = new SimpleDateFormat("yy").format(new Date());

			Iterator results = sess
					.createQuery("SELECT MAX(E.numero) FROM Etiqueta E " +
								 "WHERE SUBSTR(DATEPART('YEAR',E.dataEmissao),3,2) = SUBSTR(DATEPART('YEAR',CURRENT_DATE),3,2)")
					.list().iterator();

			String numero = "0";

			if (results.hasNext()) {
				numero = (String) results.next();
				if (numero == null)
					numero = "0";
			}

			if (numero.length()>1)
				numero = numero.substring(2, numero.length());
			
			Integer i = Integer.parseInt(numero);
			i++;

			NumberFormat nf = NumberFormat.getInstance();
			nf.setMinimumIntegerDigits(7);
			nf.setGroupingUsed(false);

			key = exercicio + nf.format(i);
		}
		System.out.println("####### O id gerado é: " + key);
		return key;
	}

}

Fica ai a resposta do outro Fórum para alguém que queira fazer dessa forma…

Aqui a referencia do nosso colega: http://www.javafree.org/javabb/viewtopic.jbb?t=859776

Nem alterei muito, mas, pra mim o numero.replace deu erro…

Blz… 8)