У меня есть база данных, которая может иметь различные типы отношений в зависимости от того, какие данные были обновлены во время последней бизнес-транзакции. Примером может служить приложение для написания политики. Основная таблица содержит общую информацию об уровне политики, и есть связанные таблицы, содержащие такую информацию, как информация об агенте и информация о страхователях. При выполнении первой транзакции все таблицы заполняются, однако в последующих транзакциях только таблицы, которые имеют обновления, сохраняются в базе данных. Сейчас я пытаюсь создать классы, реализующие JPA, которые определяют отношения между таблицами как один к одному. Затем я хотел бы реализовать пользовательские загрузчики для каждого из отношений, чтобы каждый раз, когда я получаю объект политики, я мог получать самую последнюю версию соответствующих таблиц. Кто-нибудь знает, как реализовать эту логику? Я пытался использовать @NamedNativeQuery
и HQL, но в обоих случаях он говорит мне, что имя столбца, который я указываю, не существует.
Любая помощь будет принята с благодарностью.
Код предоставлен ниже, чтобы проиллюстрировать, что я делаю.
@Entity
@NamedNativeQuery(name = "loadLatestBilling",
query = "Select {i.*} from TransactionSummary as ts outer join BillingInfo i on i.systemAssignId=ts.systemAssignId where ts.systemAssignId=:systemAssignId and i.transSeqNo<=:transSeqNo order by i.systemAssignId, i.transSeqNo DESC",
resultClass = BillingInfo.class)
public class CoTransactionSummary implements java.io.Serializable,
CdbCoTransactionSummary {
@OneToOne(targetEntity = BillingInfo.class, fetch = FetchType.LAZY)
@org.hibernate.annotations.NotFound(action = org.hibernate.annotations.NotFoundAction.IGNORE)
@Loader(namedQuery = "loadLatestBilling")
public BillingInfo getBillingInfo() {
return billingInfo;
}
public void setBillingInfo(BillingInfo billingInfo) {
this.billingInfo= billingInfo;
}
}
В приведенном выше примере SystemAssignId будет общим для всех записей, относящихся к этому объекту. Значение transSeqNo будет увеличиваться для каждой последующей транзакции, и, таким образом, пользовательский загрузчик будет искать самое высокое значение, связанное с systemAssignId.
Большое спасибо за любую помощь, которую вы можете оказать.