[解決済み] アノテーション @Id と @GeneratedValue(strategy = GenerationType.IDENTITY) はどのように使うのですか?なぜGenerationTypeがIDENTITYなのですか?
質問
@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");
}
}
*Domain抽象クラスを拡張する必要はありますか?
どのように解決するのですか?
まず、configureメソッドにアノテーションを使うのは、延々とXML設定ファイルをコピーする代わりに便利な方法です。
を使用します。
@Id
のアノテーションを継承しています。
javax.persistence.Id
以下のメンバフィールドが現在のエンティティの主キーであることを示します。したがって、Hibernateとspringフレームワークだけでなく、いくつかの
reflect
は、このアノテーションに基づいて動作します。
IDのjavadoc
は
@GeneratedValue
アノテーションは、指定されたカラム(フィールド)の増加方法を設定するためのものです。たとえば
Mysql
を指定することができます。
auto_increment
テーブルの定義で、自己インクリメントにするために
@GeneratedValue(strategy = GenerationType.IDENTITY)
をJavaコードに追加することで、このデータベースサーバー側の戦略を使用することも認めていることを示します。また、このアノテーションの値は、異なる要件に合うように変更することができます。
1. データベースでのシーケンスの定義
例えば、Oracleでは
sequence
をインクリメントメソッドとして使用し、Oracleでシーケンスを作成するとします。
create sequence oracle_seq;
2. データベースの配列を参照する
さて、データベースには配列がありますが、JavaとDBの関係を確立する必要があります。
@SequenceGenerator
:
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
sequenceName
はOracleにおけるシーケンスの実名です。
name
は、Javaで呼びたいものです。 を指定する必要があります。
sequenceName
と異なる場合は
name
を使用し、それ以外の場合は
name
. 私は通常
sequenceName
を使用すると、時間の節約になります。
3. Javaでシーケンスを使用する
最後に、このシーケンスをJavaで使ってみましょう。この配列に
@GeneratedValue
:
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
は
generator
フィールドは、使用するシーケンスジェネレータを指定します。これはDBにある実際のシーケンス名ではなく
name
フィールドの
SequenceGenerator
.
4. 完成
つまり、完全版はこのようになるはずです。
public class MyTable
{
@Id
@SequenceGenerator(name="seq",sequenceName="oracle_seq")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="seq")
private Integer pid;
}
さて、これらのアノテーションを使って、JavaWebの開発をより簡単にしましょう。
関連
-
[解決済み] JVM起動時のパラメータ「-Xms」「-Xmx」とは何ですか?
-
[解決済み] このフォーマット(Tue Jul 13 00:00:00 CEST 2010)の日付をJavaの日付に変換する方法(文字列はalfrescoのプロパティに由来しています)
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] リフレクションとは何か、なぜ有用なのか?
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] UNIONとUNION ALLの違いは何ですか?
-
[解決済み】「INNER JOIN」と「OUTER JOIN」の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Jdbctemplate の文字列に対するクエリです。EmptyResultDataAccessException: 不正な結果サイズ:期待値1、実際0
-
[解決済み] Java - JTextFieldが空かどうかを確認する
-
[解決済み] Java の substring() の時間複雑性
-
[解決済み] java.lang.ClassCastException: java.util.Arrays$ArrayList は java.util.ArrayList にキャストできません。
-
[解決済み] java.lang.IncompatibleClassChangeError: Mongo クラスを実装しています。
-
[解決済み] プロトコルハンドラの初期化に失敗しました。
-
[解決済み] 要素 'beans' の宣言が見つかりません。
-
[解決済み] javax.naming.NameNotFoundException
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] ヘッドリカーシオンとテールリカーシオンの違い [重複]について