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)