2つのテーブルに休止状態の主キー

user1474111

私はHibernateを学ぼうとしていますが、2つのクラスが相互に関連しています。人と住所。PersonはAddressオブジェクトを構成し、dbPersonテーブルにはaddress_id列があります。

基本的に:

1)テーブルPersonには列があります:id、name、age、address_id 2)テーブルアドレスには列があります:id、street、city

私が観察しているのは、レコードを挿入すると、Personテーブルにid = 1、Addressテーブルにid = 2が使用されることです。したがって、同じシーケンスからPKを生成するように見えます。実際にはすべてが機能していますが、なぜそれがそのようなのか、なぜアドレステーブルでid = 1を使用しないのですか?

コードは次のようになります。

@Entity
public class Person {


    public Person(){

    }

    public Person(String name, int age, Adress adress){
        this.name = name;
        this.age = age;
        this.adress = adress;
    }

    @Id
    @GeneratedValue
    private int id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "AGE")
    private int age;

    @OneToOne(cascade = CascadeType.ALL)
    @JoinColumn(name="address_id")
    private Adress adress;
}

別のクラスは次のとおりです。

@Entity
public class Adress {

    @GeneratedValue
    @Id
    private int id;

    @Column(name = "STREET")
    private String street;

    @Column(name = "CITY")
    private String city;


    public Adress(){

    }

    public Adress(String street, String city){
        this.street = street;
        this.city = city;
    }

そして、私はsaveメソッドを次のように呼び出しています:

  private static void addPerson(SessionFactory sessionFactory){
        Adress adress = new Adress("Wroclawska", "Krakow");
        Person person = new Person("Cemal Inanc", 31, adress);

        Transaction tx = null;
        Session session = null;
        try {
            session= sessionFactory.openSession();
            tx = session.beginTransaction();
            session.save(person);
            tx.commit();
        }
        catch (Exception e){
            tx.rollback();
            System.out.println("Exeception occured");
        }
        finally {
            session.close();
        }
    }
yashjain12yj

デフォルトのジェネレータ戦略を使用しているので、オラクルの場合はシーケンスです。

内部的には、データベースにシーケンスを作成し、そのシーケンスから値を取得します。

ここで、両方のエンティティに対して個別のシーケンスを取得する必要があります。指定する必要があります

@SequenceGenerator()

コードに加える必要のある変更:

個人エンティティの場合

@Entity
public class Person {

    @Id
    GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GeneratorName")
    @SequenceGenerator(name="GeneratorName", sequenceName = "seq1")
    private int id;    
}

住所エンティティの場合

@Entity
public class Adress {

    @Id
    GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "GeneratorName")
    @SequenceGenerator(name="GeneratorName", sequenceName = "seq2")
    private int id;
}

これらの変更を適用すると、1から始まる両方のIDが取得されます。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

複数の主キーを持つ休止状態の結合テーブル

分類Dev

JPAは2つの外部キーを同じテーブルに休止状態にします

分類Dev

1つのエンティティにつき2つのテーブルを休止状態にする

分類Dev

1つの休止状態の基準に2つの異なるテーブル(クラス)を追加したい

分類Dev

HQlを休止状態にして2つのレベルのテーブルを結合する

分類Dev

2つのJavaファイルを同じDBテーブルに休止状態でリンクします

分類Dev

テーブルにフィールドを挿入せずに、休止状態のテーブルに2つのクラスをマッピングする

分類Dev

異なるエンティティからの新しいテーブルへの2つの外部キーが休止状態

分類Dev

休止状態の主キーのプリミティブまたはラッパー

分類Dev

共有主キーを持つ休止状態の所有エンティティ側

分類Dev

1つのクラスを多くのテーブルに休止状態にする

分類Dev

注釈付きの休止状態の文字列主キー

分類Dev

休止状態の基準API結合テーブルの問題

分類Dev

主キーなしでテーブルまたはビューの休止状態マッピングを行う方法

分類Dev

休止状態の@Typeアノテーションについて

分類Dev

すべてのテーブル/列名を休止状態に逆引用する

分類Dev

冗長な多対多テーブルの作成を休止状態にする

分類Dev

冗長な多対多テーブルの作成を休止状態にする

分類Dev

不要なマッピングテーブルの作成を休止状態にする

分類Dev

HQLは多くのテーブルを休止状態にします

分類Dev

休止状態:単一テーブル内の親子関係

分類Dev

フィールドの値を休止状態の別のテーブルのエントリに制限する

分類Dev

エンティティを休止状態の複合主キーとマージする際の例外

分類Dev

エンティティを休止状態の複合主キーとマージする際の例外

分類Dev

1対多の休止状態、多くのエンティティの主キーを使用したくない

分類Dev

1対多の休止状態、多くのエンティティの主キーを使用したくない

分類Dev

休止状態:地図二つの列をHashMapののキーと値に

分類Dev

BigQueryテーブルデータを最新の状態に保つ

分類Dev

キーと値の休止状態の数

Related 関連記事

  1. 1

    複数の主キーを持つ休止状態の結合テーブル

  2. 2

    JPAは2つの外部キーを同じテーブルに休止状態にします

  3. 3

    1つのエンティティにつき2つのテーブルを休止状態にする

  4. 4

    1つの休止状態の基準に2つの異なるテーブル(クラス)を追加したい

  5. 5

    HQlを休止状態にして2つのレベルのテーブルを結合する

  6. 6

    2つのJavaファイルを同じDBテーブルに休止状態でリンクします

  7. 7

    テーブルにフィールドを挿入せずに、休止状態のテーブルに2つのクラスをマッピングする

  8. 8

    異なるエンティティからの新しいテーブルへの2つの外部キーが休止状態

  9. 9

    休止状態の主キーのプリミティブまたはラッパー

  10. 10

    共有主キーを持つ休止状態の所有エンティティ側

  11. 11

    1つのクラスを多くのテーブルに休止状態にする

  12. 12

    注釈付きの休止状態の文字列主キー

  13. 13

    休止状態の基準API結合テーブルの問題

  14. 14

    主キーなしでテーブルまたはビューの休止状態マッピングを行う方法

  15. 15

    休止状態の@Typeアノテーションについて

  16. 16

    すべてのテーブル/列名を休止状態に逆引用する

  17. 17

    冗長な多対多テーブルの作成を休止状態にする

  18. 18

    冗長な多対多テーブルの作成を休止状態にする

  19. 19

    不要なマッピングテーブルの作成を休止状態にする

  20. 20

    HQLは多くのテーブルを休止状態にします

  21. 21

    休止状態:単一テーブル内の親子関係

  22. 22

    フィールドの値を休止状態の別のテーブルのエントリに制限する

  23. 23

    エンティティを休止状態の複合主キーとマージする際の例外

  24. 24

    エンティティを休止状態の複合主キーとマージする際の例外

  25. 25

    1対多の休止状態、多くのエンティティの主キーを使用したくない

  26. 26

    1対多の休止状態、多くのエンティティの主キーを使用したくない

  27. 27

    休止状態:地図二つの列をHashMapののキーと値に

  28. 28

    BigQueryテーブルデータを最新の状態に保つ

  29. 29

    キーと値の休止状態の数

ホットタグ

アーカイブ