Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > проблема с Entity EJB3


Автор: ynblpb 29.10.2008, 07:30
Доброго времени суток!

При использовании EJB3 столкнулся с проблемой:
Если в БД изменить данные до установки на сервер бинов, то все данные отображаются...
Если после установки вручную изменить данные, то изменений не видно...

Возможно ли сделать так чтобы при запросе данные считывались из БД?

Автор: powerOn 29.10.2008, 11:12
Из Вашего вопроса, лично я, ничего не понял. 

Автор: Asal 29.10.2008, 11:47
вероятно при запросе дянные берутся из кэша ORM которой вы пользуетесь.
код увидеть можно ?

Автор: ynblpb 29.10.2008, 11:59
Это бин
Код

@Entity
@javax.persistence.SequenceGenerator(name="SEQ_NACT", sequenceName="nsi.naction_id_seq")
@Table(name = "nsi.naction")
public class Naction implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(generator="SEQ_NACT",strategy=GenerationType.SEQUENCE)
    @Column(name = "id", nullable = false)
    private Integer id;
    @Column(name = "aname")
    @OneToMany(mappedBy = "idAct")
    private Collection<Nparameters> nparametersCollection;
...
}

Это фасад

Код

@Stateless
public class NactionFacade implements NactionFacadeLocal {
    @PersistenceContext
    private EntityManager em;

  
    public List<Naction> findAllAction() {
        return em.createQuery("select object(o) from Naction as o where o.atype='server'").getResultList();
    }
    
}


Вот так вызываю
Код

 for (Naction action : nactionFacade.findAllServerAction()) {
               ....
                    for (Nparameters param : action.getNparametersCollection()) {
                       ....
                    }
...
}

Проблема в "параметрах"... если их менять вручную в БД то данные в цикле не меняются...
А как отменить кеширование?

Автор: Asal 29.10.2008, 12:58
Цитата(ynblpb @  29.10.2008,  11:59 Найти цитируемый пост)
А как отменить кеширование?

а зачем?

Цитата(ynblpb @  29.10.2008,  11:59 Найти цитируемый пост)
    
Код

@Column(name = "aname")    
@OneToMany(mappedBy = "idAct")    
private Collection<Nparameters> nparametersCollection;


вместо этого попробуйте

 
Код

   @Column(name = "aname")    
    @OneToMany(mappedBy = "idAct", cascade=ALL)    
    private Collection<Nparameters> nparametersCollection;


Добавлено через 4 минуты и 37 секунд
хотя думаю что будет достаточно и
Код

cascade=REFRESH

http://java.sun.com/javaee/5/docs/api/javax/persistence/CascadeType.html

Автор: powerOn 29.10.2008, 13:17
http://weblogs.java.net/blog/guruwons/archive/2006/09/understanding_t_1.html полезная статья в тему.

Автор: AntonSaburov 29.10.2008, 13:26
Тут уже высказались по делу. Я могу только повторить - EJB-сервер (а точнее движок для EJB) кэширует данные для скорости. И если руками с другой стороны как-то поменять данные в базе, то кэш их само собой не заметит. Будьте бдительны - не делайте такие вещи. И все будет хорошо.

Автор: ynblpb 29.10.2008, 13:44
Спасибо всем! Проблема решена smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)