複合キーを持つ@OneToOneエンティティのJPA @Id

レイフ:

同じフィールドに注釈と注釈を付け@Entityクラスがあります。通常、これは問題にはなりませんが、これらの注釈を持つフィールドのエンティティークラスは複合キーを使用します。これは私が予想していたよりも多くの問題を引き起こしています。@Id@OneToOne

問題を引き起こしているエンティティクラスは次のとおりです。

@Entity
public class ReportDetails implements Serializable {

    @Id
    @OneToOne
    private MachineLine machineLine;
}

そしてMachineLine、これはIDとして使用されているエンティティクラスですReportDetails

@Entity
@IdClass(MachineLine.MachineLineKey.class)
public class MachineLine {

    @Id
    @ManyToOne
    private Machine machine;

    @Id
    private long lineIndex;

    public static class MachineLineKey implements Serializable {
        private Machine machine;
        private long lineIndex;
    }
}

スペースを節約するために、これらのクラス定義から余分なフィールドとゲッターとセッターを省略しました。

アプリケーションを実行しようとすると、次の例外が発生します。

java.lang.IllegalArgumentException: This class [class ReportDetails] does not define an IdClass

私が入れたとき@IdClassに注釈をReportDetailsそれ、私はで定義どんなクラスの個々のフィールドの定義が必要です@IdClassのように、MachineLineただし、データベースからエンティティが取得さMachineLineれるたびにReportDetailsエンティティ全体が返されるように、これを回避しようとしています。

内に追加のフィールドを定義する必要なしにMachineLine、のIDフィールドとして持つ方法はありReportDetailsますReportDetailsか?

ブライアン・ヴォスバーグ:

これは、JPAが「派生ID」と呼んでいるものです。あなたはこのようなことを試すかもしれません:

ReportDetails:

@Entity
public class ReportDetails implements Serializable {
    // all attributes map by the relationship: AttributeOverride is not allowed
    @EmbeddedId
    private MachineLine.Id id;

    @MapsId
    @JoinColumns({
        @JoinColumn(name="machineId", referencedColumnName="machineId"),
        @JoinColumn(name="machineLineIndex", referencedColumnName="index")
    })
    @OneToOne
    private MachineLine machineLine;

    // ...
}

MachineLine:

@Entity
public class MachineLine {

    @EmbeddedId
    private Id id;

    @MapsId("machineId") // maps machineId attribute of embedded id
    @ManyToOne
    private Machine machine;

    // ...

    @Embeddable
    public static class Id implements Serializable {
        private long machineId; // corresponds to PK type of Machine
        private long index;
        // ...
    }
}

機械:

@Entity
public class Machine {

    @Id
    private long id;

    @OneToMany(mappedBy = "machine")
    private List<MachineLine> lines;

    // ...
}

派生IDは、セクション2.4.1のJPA 2.2仕様(例を使用して)議論されています。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

複合IDを持つJPA埋め込み可能エンティティ

分類Dev

複合IDを持つエンティティのHATEOASリンク生成のカスタマイズ

分類Dev

EF6で主キーとID列の両方を持つエンティティを作成します

分類Dev

主キーとしてidを持つと同時に、エンティティと依存エンティティを作成します

分類Dev

JACKSON REST APIは、ManyToOneでのみIDを持つエンティティフィールドを追加します

分類Dev

JPA基準:ルートを複数のエンティティサブクラスにダウンキャストし、同じリンクエンティティのナチュラルIDでフィルタリングする

分類Dev

Hibernate Envers の複合 ID エンティティを解決できない

分類Dev

JPAがエンティティのIDを生成しない

分類Dev

JPA / Hibernate:@Idアノテーションを持つフィールドの同じセッションで重複する値を永続化する方法は?

分類Dev

2つのIDフィールドを持つテーブルのクエリ

分類Dev

Hibernate / JPA、@ OneToOneアソシエーションにIDを設定するだけで、新しいエンティティを保存します

分類Dev

knp paginatorを使用するエンティティの複合主キーでは、単一のIDは許可されません

分類Dev

同じIDを持つ複数のテキストフィールドの最後にテキストフィールドを追加します

分類Dev

子がIDキーを持っている場合、EFを使用して複数の子エンティティをオブジェクトに追加するにはどうすればよいですか?

分類Dev

JPA:複合主キーを持つ永続エンティティ

分類Dev

ロールバック後のJPA / Hibernateのエンティティ状態とエンティティID値

分類Dev

SpringJPA-同じIDを持つ異なるエンティティ

分類Dev

タイプEFを知らずに一意のIDを持つエンティティを検索する

分類Dev

データストアで生成されたIDを持つエンティティを取得できません

分類Dev

Hibernate Search Java Spring、指定されたIDを持つエンティティのみを検索

分類Dev

typeorm:多対多の関係IDを持つエンティティを保存する

分類Dev

IDのJPAエンティティの問題

分類Dev

IDを持つキャラクターのリクエストに関するリックアンドモーティAPIの問題

分類Dev

Golangとmgo:_id、作成時間、最終更新などの一般的なフィールドを持つ一般的なエンティティを作成する方法

分類Dev

IDのないJPAエンティティ

分類Dev

ドキュメントのIDを知らなくても、子を持つプロパティを複数のドキュメントで検索する方法

分類Dev

Hibernateは2つのテーブル/エンティティに対して1つのIDを生成します

分類Dev

EF6:外部キー関係を持つエンティティプロパティの変更-IDまたは関連オブジェクト、あるいはその両方を変更する必要がありますか?

分類Dev

Androidで同じエンティティIDの複数の画像をキャッシュする方法

Related 関連記事

  1. 1

    複合IDを持つJPA埋め込み可能エンティティ

  2. 2

    複合IDを持つエンティティのHATEOASリンク生成のカスタマイズ

  3. 3

    EF6で主キーとID列の両方を持つエンティティを作成します

  4. 4

    主キーとしてidを持つと同時に、エンティティと依存エンティティを作成します

  5. 5

    JACKSON REST APIは、ManyToOneでのみIDを持つエンティティフィールドを追加します

  6. 6

    JPA基準:ルートを複数のエンティティサブクラスにダウンキャストし、同じリンクエンティティのナチュラルIDでフィルタリングする

  7. 7

    Hibernate Envers の複合 ID エンティティを解決できない

  8. 8

    JPAがエンティティのIDを生成しない

  9. 9

    JPA / Hibernate:@Idアノテーションを持つフィールドの同じセッションで重複する値を永続化する方法は?

  10. 10

    2つのIDフィールドを持つテーブルのクエリ

  11. 11

    Hibernate / JPA、@ OneToOneアソシエーションにIDを設定するだけで、新しいエンティティを保存します

  12. 12

    knp paginatorを使用するエンティティの複合主キーでは、単一のIDは許可されません

  13. 13

    同じIDを持つ複数のテキストフィールドの最後にテキストフィールドを追加します

  14. 14

    子がIDキーを持っている場合、EFを使用して複数の子エンティティをオブジェクトに追加するにはどうすればよいですか?

  15. 15

    JPA:複合主キーを持つ永続エンティティ

  16. 16

    ロールバック後のJPA / Hibernateのエンティティ状態とエンティティID値

  17. 17

    SpringJPA-同じIDを持つ異なるエンティティ

  18. 18

    タイプEFを知らずに一意のIDを持つエンティティを検索する

  19. 19

    データストアで生成されたIDを持つエンティティを取得できません

  20. 20

    Hibernate Search Java Spring、指定されたIDを持つエンティティのみを検索

  21. 21

    typeorm:多対多の関係IDを持つエンティティを保存する

  22. 22

    IDのJPAエンティティの問題

  23. 23

    IDを持つキャラクターのリクエストに関するリックアンドモーティAPIの問題

  24. 24

    Golangとmgo:_id、作成時間、最終更新などの一般的なフィールドを持つ一般的なエンティティを作成する方法

  25. 25

    IDのないJPAエンティティ

  26. 26

    ドキュメントのIDを知らなくても、子を持つプロパティを複数のドキュメントで検索する方法

  27. 27

    Hibernateは2つのテーブル/エンティティに対して1つのIDを生成します

  28. 28

    EF6:外部キー関係を持つエンティティプロパティの変更-IDまたは関連オブジェクト、あるいはその両方を変更する必要がありますか?

  29. 29

    Androidで同じエンティティIDの複数の画像をキャッシュする方法

ホットタグ

アーカイブ