Переход в спящий режим: использование объекта с составным ключом

#hibernate #jpa

#переход в спящий режим #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.Время com.somepackage.TimePK

Вопрос:

Как использовать вышеуказанные классы в запросе?? например, Найти confPathId, col2 где levelstation равно 10, а col1 равно 20 — каким будет запрос hibernate для этого требования?

Использование «from TimePK T» в запросе выдает ошибку «TimePK не сопоставлен»!!

Ответ №1:

Взгляните на спецификацию JPA.

В разделе 2.4.1.3 Examples of Derived Identities определяется множество примеров.

Комментарии:

1. «с момента времени T, где T.timePK.levelStation = 10 и T.timePK.col1 = 20» правильно??

Ответ №2:

Ваш TimePK не является реальной сущностью (сопоставленной с таблицей в БД), это виртуальный объект, содержащий PK вашего объекта Time. Вы должны найти объект Time, а не TimePK.