In realtà, qui il tuo SOMETHING_SEQ
è il nome della sequenza è stata configurata da qualche parte nella configurazione di ibernazione. E hibernate_sequence
è il nome della sequenza nel database. Nella configurazione sarà simile al seguente,
<sequence-generator name="SOMETHING_SEQ"
sequence-name="hibernate_sequence"
allocation-size="<any_number_value>"/>
È possibile saltare completamente questa configurazione utilizzando invece l'annotazione. Quindi l'annotazione @SequenceGenerator
dovrebbe fornire pochi altri parametri. Di seguito è riportato l'esempio.
@SequenceGenerator(name="SOMETHING_SEQ", sequenceName="hibernate_sequence", allocationSize=10)
Per esempio i molteplici classi di entità farebbe qualcosa di simile qui di seguito,
@Entity
public class Entity1 {
@Id
@SequenceGenerator(name = "entity1Seq", sequenceName="ENTITY1_SEQ", allocationSize=1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity1Seq")
@Column(name = "ID", nullable = false)
private Long id;
...
...
}
@Entity
public class Entity2 {
@Id
@SequenceGenerator(name = "entity2Seq", sequenceName="ENTITY2_SEQ", allocationSize=10)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "entity2Seq")
@Column(name = "ID", nullable = false)
private Long id;
...
...
}
fonte
2010-03-05 04:17:32
Grazie. Ma nel mio caso, in che modo l'ibernazione fornisce il mio id? Come quando salgo la mia entità con un valore nullo per il mio ID lungo, magicamente viene inserito automaticamente. È tramite qualche tabella speciale, o usando quel hibernate_sequence? O..? – JavaRocky
Usando 'hibernate-seq', e ovviamente quando hai detto che Hibernate lo genera, non devi fornirtelo tu stesso. O anche se fornisci qualche valore per dire, quel valore verrebbe sovrascritto. –
Stai dicendo che più entità condividono la stessa sequenza di ibernazione? – JavaRocky