Доброго времени суток.
Помогите разобраться и ткните пальцем куда надо...
Есть Entity:
@Entity
@NamedQuery(name = "Man.findAll", query = "select o from Man o")
@Table(name = "MAN")
public class Man implements Serializable {
@Column(nullable = false)
private Long age;
@Id
@Column(nullable = false)
private Long id;
private String name;
... Ну и Геттеры и сеттеры соответственно
}
Есть Stateless Session Bean:
@Stateless(name="SessionFacade")
public class SessionFacadeBean implements SessionFacade, SessionFacadeLocal {
@PersistenceContext(unitName="Model")
private EntityManager em;
public SessionFacadeBean() {
}
/** <code>select o from Man o</code> */
public List<Man> queryManFindAll() {
List<Man> lst = em.createNamedQuery("Man.findAll").getResultList();
return lst;
}
}
и есть клиент этого бина:
public class SessionFacadeClient {
public static void main(String [] args) {
try {
final Context context = getInitialContext();
SessionFacade sessionFacade = (SessionFacade)context.lookup("SessionFacade");
List<Man> l = sessionFacade.queryManFindAll();
for (Man m: l)
System.out.println(m.getId() + " " + m.getAge() + " " + m.getName());
} catch (Exception ex) {
ex.printStackTrace();
}
}
private static Context getInitialContext() throws NamingException {
return new InitialContext();
}
}
Все работает нормально.
Но есть одна тонкость:
Проделываю следующую последовательность действий:
1) Запускаю Session bean
2) Запускаю клиента — выборку делает правильно
3) Ручками в базе изменяю строку
4) Запускаю клиента — выборка получается что и в случае 2. То есть изменения внесенные другими прилижениями не видны.
Насколько я понимаю, что из-за того что выбока em-ом делается из PersistanceContext, то есть при второй выборке в базу никто не лезит. Так вот вопрос — правильно ли я думаю и как сделать так, чтобы выбирались текущие значения из базы данных?