Secondo sezione 11.1.48 SequenceGenerator Annotation
della specifica JPA 2.1:
La portata del nome generatore è globale all'unità di persistenza (in tutti i tipi di generatori).
Quindi non è possibile avere generatori duplicati.
Se si tenta di aggiungere i seguenti due entità:
@Entity(name = "Post")
public static class Post {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
@GenericGenerator(
name = "pooled",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "5"),
}
)
private Long id;
}
@Entity(name = "Announcement")
public static class Announcement {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pooled")
@GenericGenerator(
name = "pooled",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "sequence"),
@Parameter(name = "initial_value", value = "1"),
@Parameter(name = "increment_size", value = "10"),
}
)
private Long id;
}
Hibernate genererà il seguente messaggio di errore:
più riferimenti a sequenza di database [sequenza] sono state riscontrate il tentativo di impostare in conflitto valori per 'incrementare la dimensione'. Trovato [10] e [5]
Questo perché il generatore di identificatore è globale e le due configurazioni di sequenza sarà in conflitto.
fonte
2016-01-25 12:59:54
Penso che sia valido, perché alla fine della giornata, questo è solo il modo in cui Hibernate mapperà l'entità alla sequenza che genererà l'ID quando lo manterrà nel DB. Ad esempio, Oracle non si cura delle tabelle che usano quale sequenza, poiché la sequenza stessa è un'entità indipendente. IMO questo avviso (o errore) ha più senso in base al DBMS che stai utilizzando. IMO, disabiliterei semplicemente l'avviso di errore in eclissi. – Leo
Grazie Leo. Il tuo commento potrebbe essere una risposta valida. – fabien7474