2017-06-09 13 views
0

からその親を参照したい場合は、this answerに記載されているように、この埋め込みフィールドにはセッターで親を「手動」に設定して@Access(AccessType.PROPERTY)を使用できますが、この埋め込み要素がコレクションにマッピングされているとどうなりますか、それは怠惰に読み込まれていますか?JPA:@Embeddableオブジェクトは、所有者への参照をどのように戻すことができますか?@Embeddableは遅延コレクションにありますか?

答えて

0

これは問題であるかどうか実際には分かりません。手動ではなく、@embeddableからその親に戻って参照する場合はすべて問題ありません。

は、エンティティのプライマリテーブルを参照するコレクションテーブルの外部キー列を設定するために使用されます。つまり、このオプションのプロパティを設定すると、@ EMBEDDABLEから親。

は一例として、あなたのケースを使用してください:

@Entity 
public class Image { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

.... 

    @ElementCollection(fetch = FetchType.LAZY) 
    @CollectionTable(name = "COMPUTERS", joinColumns = @JoinColumn(name = "ID_IMAGE")) 
    private List<Computer> computers; 
} 

@Embeddable 
public class Computer { 

    @Column 
    private String ipAddress; 

    *****//This idImage field is not necessary 
    @Column(name = "ID_IMAGE", insertable = false, updatable = false) 
     private Long idImage;***** 

} 

は一度フィールドidImageとその@Columnアノテーションをコメントアウトし、生成されたSQLは次のとおりです。

create table IMAGES (
      id bigint not null, 
      Name_Image varchar(255), 
      primary key (id) 
     ) 

create table COMPUTERS (
     ID_IMAGE bigint not null, 
     ipAddress varchar(255) 
    ) 

alter table COMPUTERS 
    add constraint FKl1ucm93ttye8p8i9s5cgrurh 
    foreign key (ID_IMAGE) 
    references IMAGES 

"手動" に参加列を宣言した場合埋め込み可能なクラスはDDLは同じですが、埋め込み可能なオブジェクトには1つの追加のフィールド "imageId"が含まれます。これにより、INSERT操作を実行するときにインデックスからJDBC呼び出しパラメータが外れます。

関連する問題