У меня есть объект Demographics, который содержит коллекцию объектов MedicalRecordsReceived:
//Demographics entity
@OneToMany(cascade = CascadeType.ALL, mappedBy = "demographics", fetch=FetchType.EAGER) частная коллекция medicalRecordsReceivedCollection;
А также
//MedicalRecordsReceived entity
@JoinColumn(name = "demographics_id", referencedColumnName = "iddemographics") @ManyToOne(необязательно = false, fetch=FetchType.EAGER) private Demographics demographics;
Когда я извлекаю сущность Demographics (в приложение Struts), коллекция работает нормально, и все поля в каждой сущности MedicalRecordsReceived отображаются нормально, за исключением идентификатора сущности Demographics, хранящегося в таблице MedicalRecordsReceived, которая, конечно, является внешним ключом. Та же проблема возникает при сохранении. Внешний ключ не может быть найден, и обновления не происходят.
Я понимаю, что у меня уже есть внешний ключ, когда я извлекаю объект «Демография», но удивляюсь, почему я не могу получить доступ через геттеры объекта «Демография». Думаю, я не совсем понимаю круговые отношения здесь...
Ник
1 ответ
Вы не можете сопоставить один и тот же столбец базы данных с двумя разными полями. Столбец соединения demographics_id
уже используется для сопоставления демографической ассоциации ManyToOne. Чтобы получить значение внешнего ключа, просто используйте medicalRecordsReceived.getDemographics().getId()
.
Чтобы сохранить новый экземпляр MedicalRecordsReceived, указывающий на экземпляр Demographics, вы должны инициализировать ассоциацию (и поддерживать обратную ассоциацию, чтобы иметь согласованную объектную модель):
MedicalRecordsReceived m = new MedicalRecordsReceived();
m.setDemographics(demographics);
demographics.getMedicalRecordsReceivedCollection().add(m);
// the cascade will take care of the persistence of m
Думайте с точки зрения объектов, а не с точки зрения столбцов.
Похожие вопросы
Новые вопросы
jpa
Java Persistence API (JPA) - это спецификация Java для доступа, сохранения и управления данными между объектами / классами Java и реляционной базой данных. Он является частью спецификации EJB 3.0 и является отраслевым стандартом для Object-Relational Mapping (ORM).