2017-04-23 189 views
1

我有一个实体类一对一弱实体映射JPA

@Entity 
Class Search 
{ 
    @Id 
    private Long SearchID; 
    private String Type; 

} 

和其他实体类(SearchResult所这是一个弱实体依赖于搜索类别为它的主键

@Entity 

Class SearchResults 

{ 
    @??? 
    private Long SearchID; 
} 

什么我应该使用注释将“搜索”实体类的“SearchID”指定为我的主键在我的弱实体中“SearchResults”

+0

如果SearchResult所表有一个SearchID列,为什么不使用'@ Id'吗?否则,你应该给我们关于这些表格的更多信息。 – ericbn

+0

但是我的“SearchResults”中的“searchID”取决于搜索类的“SearchID”。 –

回答

1

使用共享主键的JPA概念,可以将您的rel ationship如下:

主类:

@Entity 
public class Search { 
    @Id 
    private Long searchID; 
    private String type; 
} 

得到的标识符与单个属性

@Entity 
public class SearchResults { 
    @Id 
    @OneToOne 
    @JoinColumn(name = "SEARCHID")  
    private Search search; 
} 

推导器标识符与共享映射

@Entity 
public class SearchResults { 
    @Id 
    private Long searchID; 

    @MapsId 
    @OneToOne 
    @JoinColumn(name = "SEARCHID")  
    private Search search; 
} 

完全一rticle here:http://vard-lokkur.blogspot.com.br/2014/05/onetoone-with-shared-primary-key.html

1

SearchResult不一定是一个实体。

虽然它可以被映射为具有共享PK的Enity,如其他答案中所建议的那样,但作为弱实体,它不能独立于其相关搜索存在,因此可以映射为Embeddable。

https://en.wikibooks.org/wiki/Java_Persistence/Embeddables

@Entity 
public class Search 
{ 
    @Id 
    private Long SearchID; 

    private String Type; 

    @ElementCollection 
    @CollectionTable(....) 
    private Set<SearchResults> results; 
} 


@Embeddable 
public class SearchResults 
{ 
    //does not need an Id 

    //other fields 
}