Quelle est la différence entre: l'identifiant de la séquence utilisant JPA @TableGenerator, @GeneratedValue et la base de données Auto_Increment

T1.: Quelle est la différence entre l'application de la séquence Id dans une base de données à l'aide de

A.

CREATE TABLE Person
(
   id long NOT NULL AUTO_INCREMENT
   ...
   PRIMARY KEY (id)
)

contre

B.

@Entity
public class Person {
    @Id
    @TableGenerator(name="TABLE_GEN", table="SEQUENCE_TABLE", pkColumnName="SEQ_NAME",
        valueColumnName="SEQ_COUNT", pkColumnValue="PERSON_SEQ")
    @GeneratedValue(strategy=GenerationType.TABLE, generator="TABLE_GEN")
    private long id;
    ...
}

Mon système est hautement simultanées. Depuis ma DB est un serveur Microsoft SQL server, je ne pense pas qu'il prend en charge @SequenceGeneratordonc je dois rester avec @TableGenerator qui est sujette à des problèmes de concurrence.

T2. Ce lien ici (http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Advanced_Sequencing) suggère que B risque de souffrir de problèmes de concurrence, mais je ne comprends pas la solution proposée. Je serais très heureux si quelqu'un pouvait m'expliquer comment faire pour éviter des problèmes de concurrence avec B. Voici un extrait de leur solution:

If a large sequence pre-allocation size is used this becomes less of an issue, because the sequence table is rarely accessed.

T2.1: Combien de répartition de la taille parlons-nous ici? Dois-je faire allocationSize=10 ou allocationSize=100?

Some JPA providers use a separate (non-JTA) connection to allocate the sequence ids in, avoiding or limiting this issue. In this case, if you use a JTA data-source connection, it is important to also include a non-JTA data-source connection in your persistence.xml.

T2.2: - je utiliser EclipseLink que mon fournisseur; ce que je dois faire ce qu'il suggère ci-dessus?

T3. Si B souffre de problèmes de concurrence, ne Un subir le même?

source d'informationauteur Thang Pham