Hibernate:使用具有复合键的实体

时间:2011-11-14 12:15:34

标签: hibernate jpa

我有一个包含复合主键的表:

从SO中的其他问题的表中提取示例

复合主键类:

@Embeddable 
public class TimePK implements Serializable {     
protected Integer levelStation;     
protected Integer confPathID;  
protected Integer col1;
protected Integer col2;    

public TimePK() {}      

public TimePK(Integer levelStation, Integer confPathID, Integer col1, Integer col2) {         
this.levelStation = levelStation;         
this.confPathID = confPathID; 
this.col1 = col1;
this.col2 = col2; 

}     

// equals, hashCode 
}

和实体:

@Entity 
class Time implements Serializable {     

@EmbeddedId     
private TimePK timePK;      

private String src;     
private String dst;     
private Integer distance;     
private Integer price;      
//... 
} 

persistent.xml中有两个条目:

com.somepackage.Time com.somepackage.TimePK

问题:

如何在查询中使用上面的类? 例如找到confPathId,col2,其中levelstation为10,col1为20 - 这个要求的hibernate查询是什么?

在查询中使用“来自TimePK T”会给出“TimePK未映射”错误!!

2 个答案:

答案 0 :(得分:2)

查看JPA specification

2.4.1.3 Examples of Derived Identities节定义了很多的示例。

答案 1 :(得分:0)

您的TimePK不是真实实体(映射到db中的表),它是包含Time对象PK的虚拟对象。 你应该找到Time对象,而不是TimePK。