3

すべてのエンティティの基本クラスである @MappedSuperclass を取得しました (@Entity、複数のサブクラスによる直接または間接)。

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@XmlAttribute(required = true)
private Long primaryKey;

Id は上記のように生成されます。

私の問題は、@Id-counter が各 @Entity で同じであることです。実際には、Long.MAX_VALUE に到達するまでに時間がかかるため、これは大きな問題ではありません。ただし、すべてのエンティティに対してカウンターが 1 つしかないため、最大値に到達するのははるかに簡単です。上記のコードをすべての @Entity-classes に追加することなく、別の @Id-counter を使用するにはどうすればよいですか?

(あなたの答えが重要な場合:私はH2データベースを使用しています。)

4

2 に答える 2

1

データベースとテーブルがサポートしている場合AUTO_INCREMENTは、注釈を this に変更してください@Id @GeneratedValue(strategy=GenerationType.IDENTITY)。次に、コミット中にIDが生成されます。

EntityTABLE または SEQUENCE 戦略による別の方法がありますが、abstract の問題であるper で明示的に定義する必要がありますBaseEntity。ちょっと見てください:

@Entity
@TableGenerator(name="tab", initialValue=0, allocationSize=50)
public class EntityWithTableId {
    @GeneratedValue(strategy=GenerationType.TABLE, generator="tab")
    @Id long id;
}

編集:まあ、それは可能です! MappedSuperclass - サブクラスの SequenceGenerator を変更する

于 2015-05-26T08:12:53.480 に答える