@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
なぜこのアノテーションを使用するのですか?これがテーブルID値を自動インクリメントするかどうかを知る必要があります。 (GenerationType.IDENTITY)この注釈を使用するときに実際に起こっている他のタイプがあります
public class Author extends Domain
{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id")
private Integer id;
@Basic(optional = false)
@Column(name = "name")
private String name;
@Column(name = "address")
private String address;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "authorId")
private List<Book>
bookList;
public Author()
{
setServiceClassName("wawo.tutorial.service.admin.AuthorService");
}
}
*ドメイン抽象クラスを拡張する必要がありますか?
この質問に答えさせてください:
まず、configureメソッドとしてアノテーションを使用することは、無限のXML設定ファイルに対処するのではなく、単に便利なメソッドです。
@Id
annotationはjavax.persistence.Id
から継承され、下のメンバーフィールドが現在のエンティティの主キーであることを示します。したがって、HibernateおよびSpringフレームワークは、このアノテーションに基づいていくつかのreflect
作業を実行できます。詳細については、 Idのjavadoc を確認してください。
@GeneratedValue
アノテーションは、指定されたcolumn(field)のインクリメント方法を設定することです。たとえば、Mysql
を使用する場合、テーブルの定義でauto_increment
を指定して自己増分型にし、次に
@GeneratedValue(strategy = GenerationType.IDENTITY)
Javaコードで、このデータベースサーバー側の戦略を使用することにも同意したことを示します。また、さまざまな要件に合うようにこのアノテーションの値を変更できます。
たとえば、Oracleはインクリメントメソッドとしてsequence
を使用する必要があります。Oracleでシーケンスを作成するとします。
create sequence Oracle_seq;
データベースにはシーケンスがありますが、 @SequenceGenerator
を使用して、JavaとDBの関係を確立する必要があります。
@SequenceGenerator(name="seq",sequenceName="Oracle_seq")
sequenceName
はOracleのシーケンスの実際の名前です。name
はJavaでそれを呼び出したいものです。 sequenceName
と異なる場合はname
を指定する必要があり、そうでない場合はname
を使用します。私は通常、sequenceName
を無視して時間を節約します。
最後に、このシーケンスをJavaで使用します。 @GeneratedValue
を追加するだけです:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
generator
フィールドは、使用するシーケンスジェネレーターを示します。 DBの実際のシーケンス名ではなく、name
のSequenceGenerator
フィールドで指定した名前です。
したがって、完全なバージョンは次のようになります。
public class MyTable
{
@Id
@SequenceGenerator(name="seq",sequenceName="Oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private Integer pid;
}
JavaWeb開発を簡単にするために、これらの注釈を使用し始めてください。
オブジェクトリレーショナルマッピングコンテキストでは、すべてのオブジェクトに一意の識別子が必要です。 @Id
注釈を使用して、エンティティの主キーを指定します。
@GeneratedValue
注釈は、主キーの生成方法を指定するために使用されます。あなたの例では、 Identity
戦略を使用しています
永続性プロバイダーが、データベースID列を使用してエンティティの主キーを割り当てる必要があることを示します。
他の戦略があります、あなたはもっと見ることができます こちら 。
Simply, @Id: This annotation specifies the primary key of the entity.
@GeneratedValue: This annotation is used to specify the primary key generation strategy to use. i.e Instructs database to generate a value for this field automatically. If the strategy is not specified by default AUTO will be used.
GenerationType enum defines four strategies:
1. Generation Type . TABLE,
2. Generation Type. SEQUENCE,
3. Generation Type. IDENTITY
4. Generation Type. AUTO
GenerationType.SEQUENCE
With this strategy, underlying persistence provider must use a database sequence to get the next unique primary key for the entities.
GenerationType.TABLE
With this strategy, underlying persistence provider must use a database table to generate/keep the next unique primary key for the entities.
GenerationType.IDENTITY
This GenerationType indicates that the persistence provider must assign primary keys for the entity using a database identity column. IDENTITY column is typically used in SQL Server. This special type column is populated internally by the table itself without using a separate sequence. If underlying database doesn't support IDENTITY column or some similar variant then the persistence provider can choose an alternative appropriate strategy. In this examples we are using H2 database which doesn't support IDENTITY column.
GenerationType.AUTO
This GenerationType indicates that the persistence provider should automatically pick an appropriate strategy for the particular database. This is the default GenerationType, i.e. if we just use @GeneratedValue annotation then this value of GenerationType will be used.
参照: https://www.logicbig.com/tutorials/Java-ee-tutorial/jpa/jpa-primary-key.html