Q1. : を使用してデータベースにシーケンス ID を適用することの違いは何ですか?
A.
CREATE TABLE Person
(
id long NOT NULL AUTO_INCREMENT
...
PRIMARY KEY (id)
)
対
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;
...
}
私のシステムは高度に並行しています。私のDBはMicrosoft SQLサーバーであるため、サポートしているとは思わないため、同時実行の問題が発生しやすいもの@SequenceGenerator
にとどまる必要があります.@TableGenerator
Q2. こちらのリンク ( http://en.wikibooks.org/wiki/Java_Persistence/Identity_and_Sequencing#Advanced_Sequencing ) は、Bが同時実行性の問題を抱えている可能性があることを示唆していますが、提案された解決策はわかりません。Bでの同時実行の問題を回避する方法を誰かが説明してくれれば、非常にありがたいです。ここに彼らの解決策のスニペットがあります:
If a large sequence pre-allocation size is used this becomes less of an issue, because the sequence table is rarely accessed.
Q2.1 : ここで話している割り当てサイズはどれくらいですか? 私はやるべきですallocationSize=10
か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.
Q2.2 : プロバイダーとして EclipseLink を使用しています。上記で示唆されていることをしなければなりませんか?
Q3. Bが並行性の問題に悩まされている場合、 Aも同じように苦しんでいますか?