一对一弱实体映射JPA
问题描述:
我有一个实体类一对一弱实体映射JPA
@Entity
Class Search
{
@Id
private Long SearchID;
private String Type;
}
和其他实体类(SearchResult所这是一个弱实体依赖于搜索类别为它的主键
@Entity
Class SearchResults
{
@???
private Long SearchID;
}
什么我应该使用注释将“搜索”实体类的“SearchID”指定为我的主键在我的弱实体中“SearchResults”
答
使用共享主键的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
答
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
}
如果SearchResult所表有一个SearchID列,为什么不使用'@ Id'吗?否则,你应该给我们关于这些表格的更多信息。 – ericbn
但是我的“SearchResults”中的“searchID”取决于搜索类的“SearchID”。 –