Мое приложение написано в Seam (2.2.1.CR2), и в недавнем обновлении я применил поле, называемое точками для моего Пользовательский объект. Это поле должно содержать точки, объединенные из множества других полей и действий, поэтому, поскольку у меня есть база данных с множеством пользователей, я думал, что обновление этих пользователей «на лету» будет хорошей идеей. Я сделал это, назначив новый столбец в объекте User равным -1, а затем всякий раз, когда вызывается getPoints, выведите событие и обновите точки, но только один раз.EntityManager не сохраняется при слиянии и при покраснении я не могу инициализировать прокси-сервер - нет сеанса.
@Entity(name = "User")
public class User {
@Column(nullable = false, columnDefinition = "int(11) default -1")
private int points;
public int getPoints() {
if (points == -1) {
Events.instance().raiseEvent(AppreciatedInitialUpdate.EVENT_NAME, this);
}
return points;
}
}
Затем я создал pointsBean:
@Name("pointsBean")
@AutoCreate
public class PointsBean implements Serializable, AppreciatedInitialUpdate {
@Logger
private Log log;
@In
EntityManager entityManager
@Observer(AppreciatedInitialUpdate.EVENT_NAME)
public void handleAppreciatedInitialUpdate(User User) {
this.calculateInitialPoints(user);
}
private void calculateInitialPoints(User user) {
int likes = 0;
List<Flag> appreciateFlags = user.getAppreciateFlags();
likes = appreciateFlags.size();
user.setLikes(likes);
entityManager.merge(user);
log.info("Initial update of points for user " + user.getId() + ". Now he/she has " + points);
}
}
Но как мои названия государств при выполнении, как это предприятие не сохраняется, и если я промывать тогда я получаю исключение:
[org.hibernate.LazyInitializationException] could not initialize proxy - no Session
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:62)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:116)
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.invoke(JavassistLazyInitializer.java:166)
У меня, наверное, отсутствует что-то важное здесь. Что я делаю не так?
// Jakob
Yup, что был случай. Я фактически сделал entityManager.refresh (пользователь); Спасибо, что указал мне в правильном направлении. – jakob