Hibernate: come specificare il nome della class del generatore di sequenze personalizzato usando le annotazioni?

Voglio specificare la seguente configurazione di hbm usando le annotazioni:

   

Non sono sicuro di come fornire il nome della class

 @GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_STORE") 

Devo specificare @javax.persistence.SequenceGenerator in ogni class di quadro?
Posso specificare solo il nome della class sotto @GeneratedValue annotazione @GeneratedValue ?

si prega di trovare sotto il set di codice che ho usato nel progetto per lo stesso.

 @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "XyzIdGenerator") @GenericGenerator(name = "XyzIdGenerator", strategy = "com.mycompany.myapp.id.BigIntegerSequenceGenerator", parameters = { @Parameter(name = "sequence", value = "xyz_id_sequence") }) public BigInteger getId() { return id; } package com.mycompany.myapp.id; import org.hibernate.id.SequenceGenerator; ... public class BigIntegerSequenceGenerator extends SequenceGenerator { @Override public Serializable generate(SessionImplementor session, Object obj) { ... } } 

si prega di fare riferimento al generatore di id-id-in-ibernazione che può esserti d’aiuto. In questo esempio, sto creando il numero di sequenza prendendo il numero MAX dalla tabella della chiave primaria chiamata pk_table .

La class dei dipendenti si presenta come segue.

 @Entity @Table(name="EMPLOYEE") public class Employee { @Id @GenericGenerator(name = "sequence_emp_id", strategy = "com.supportmycode.model.EmployeeIdGenerator") @GeneratedValue(generator = "sequence_emp_id") @Column(name="employee_id") private String employeeId; @Column(name="firstname") private String firstname; @Column(name="lastname") private String lastname; @Column(name="birth_date") private Date birthDate; @Column(name="cell_phone") private String cellphone; //Getter and Setter methods. } 

La class EmployeeIdGenerator ha il seguente aspetto

 public class EmployeeIdGenerator implements IdentifierGenerator { public Serializable generate(SessionImplementor session, Object object) throws HibernateException { String prefix = "EMP"; Connection connection = session.connection(); try { PreparedStatement ps = connection .prepareStatement("SELECT MAX(vlaue) as vlaue from hibernate_tutorial.pk_table"); ResultSet rs = ps.executeQuery(); if (rs.next()) { int id = rs.getInt("vlaue"); String code = prefix + new Integer(id).toString(); System.out.println("Generated Stock Code: " + code); return code; } } catch (SQLException e) { e.printStackTrace(); } return null; } } 

Qui, abbiamo implementato l’interfaccia IdentifierGenerator per sovrascrivere la funzione generate (sessione SessionImplementor, object Object) . l’istruzione SELECT MAX (vlaue) come vlaue di hibernate_tutorial.pk_table otterrà il numero MAX dalla tabella pk_table. E poi prefisso il numero MAX con la stringa ” EMP “.

L’output ha il seguente aspetto:

DIPENDENTE

impiegato_id | data di nascita | cell_phone | nome | cognome

EMP1 | 2014-08-22 | 111 | Nina | Mayers