102
@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抽象クラスを拡張する必要はありますか?その用途は?

4

4 に答える 4

148

まず第一に、構成メソッドとしてアノテーションを使用することは、エンドレスな XML 構成ファイルに対処する代わりに便利な方法にすぎません。

@Id注釈は から継承され、以下のjavax.persistence.Idメンバー フィールドが現在のエンティティの主キーであることを示します。reflectしたがって、Hibernate と spring フレームワークだけでなく、この注釈に基づいていくつかの作業を行うことができます。詳細については、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 でのシーケンスの実際の名前であり、nameJava ではそれを呼びたいものです。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 開発を容易にするために、これらのアノテーションの使用を開始してください。

于 2013-12-16T07:20:08.640 に答える