Я пытаюсь добавить новый объект, а затем после успешного совершения перенаправлять его в действие списка.Когда я продолжаю, объект не отображается в виде списка
Вот краткое описание того, что я делаю:
@Name("offerAction")
@Scope(ScopeType.CONVERSATION)
public class OfferAction implements Serializable {
@In private EntityManager entityManager;
private List<OfferSite> offerSites;
@Factory("offerSites") public void findAllOfferSites() {
offerSites = entityManager.createQuery("select os from OfferSite os " +
"inner join fetch os.offer o " +
"inner join fetch os.site s " +
"inner join fetch o.store st " +
"inner join fetch os.offer.offerType ot").getResultList());
}
private Offer instance;
@Begin(join = true, flushMode = FlushModeType.MANUAL)
public String createOffer() {
instance = new Offer();
createSupportMap();
return EDIT_VIEW;
}
@End public String save() {
persist();
findAllOfferSites();
return LIST_VIEW;
}
@Transactional void persist() {
entityManager.persist();
/* goes through and persists each site and the metadata associated with each offer-site pair. */
persistOfferSites();
entityManager.flush();
entityManager.refresh(instance);
}
}
Вот часть offersite сущности, я думаю, что дает мне проблемы:
@Entity
@Table(name = "t_offer_site")
public class OfferSite {
@Embeddable
public static class Id implements Serializable { /* Long offerId, Long siteId */ }
@EmbeddedId
private Id id = new Id();
@ManyToOne
@JoinColumn(name = "offer_id", insertable = false, updatable = false)
private Offer offer;
}
/* assume getters/setters */
}
Это сохраняет объект Offer (и его метаданные OfferSite), но когда я смотрю на таблицу, отображенную из результатов findAllOfferSites(), она пропускает данные предложения из объекта OfferSite, который был только что добавлен. Информация OfferSite отображает просто отлично! Данные появляются после того, как я полностью запустил новый разговор.
#############################################
# Offer Id # Store Name # Start Date # Site #
#############################################
# 1 # Store 1 # 1/1/09 # 1 #
# 1 # Store 1 # 1/2/09 # 2 #
# # # 1/1/09 # 1 # <- NEWLY INSERTED ROW
#############################################
Это экономит предложение только штрафом без @Transactional, но оно по-прежнему не отображается. Предлагает конкретные вещи в списке OfferSites. –
@Factory ("offerСити") public void findAllOfferSites() Я верю (на основе кода, показанного вами, я прав) этот метод получает только один раз для разговора, поэтому список сайтов предложений не обновляется до следующего разговора. –