내 세션 bean은 관리 대상 엔티티에서 업데이트를 실행하지 않습니다.Eclipselink에서 날짜를 병합하지 못했습니다.
관련 클래스에 대한 코드가 포함되어 있습니다. 프라임 스 페이스 스케줄 구성 요소를 사용하여 이벤트의 날짜 필드를 수정하고 수정 된 엔티티를 세션 빈에 전달하고 em.merge (이벤트)를 호출하면 엔티티 관리자가 엔티티를 업데이트하지 않고 변경 사항이 데이터 베이스.
세션 빈
@Stateless
@LocalBean
public class CalendarSessionBean implements Serializable {
@PersistenceContext
private EntityManager em;
public void moveEvent (CalendarEvent event) {
em.merge(event);
Logger.getLogger("example").log(Level.INFO, "Moved {0}", event.getStartDate());
}
}
엔티티 빈
@Entity
public class CalendarEvent implements Serializable {
@Id
private Long id;
@PrePersist
@PreUpdate
void onUpdate() { // Never called
Logger.getLogger("example").log(Level.INFO, "Updating event on the {0}", this.getStartDate());
}
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DTE_STR", nullable = false)
@NotNull
private Date start; // Column that sould update
// ... rest omitted
}
JSF는 콩
@ManagedBean(name="agenda")
@ViewScoped
public class AgendaMBean implements Serializable {
@EJB CalendarSessionBean calendarSession;
public ScheduleModel getModel() {
if (model == null) {
model = new DefaultScheduleModel();
final Collection<CalendarEvent> calendarEvents = calendarSession.findAll();
for (final CalendarEvent calendarEvent : calendarEvents) {
Log.log(Level.FINEST, "Adding to model the {0}", calendarEvent.getStartDate());
final DefaultScheduleEvent event = new DefaultScheduleEvent();
event.setId(String.valueOf(calendarEvent.getId()));
event.setStartDate(calendarEvent.getStart());
event.setData(calendarEvent);
model.addEvent(event);
}
}
return model;
}
public void onEventMove (final ScheduleEntryMoveEvent event) {
final CalendarEvent calendarEvent =
(CalendarEvent) event.getScheduleEvent().getData();
Log.log(Level.FINEST, "Moving event to {0}", calendarEvent.getStartDate());
calendarSession.moveEvent(calendarEvent);
}
}
JSF Facelet
<p:schedule value="#{agenda.model}">
<p:ajax event="eventMove"
listener="#{agenda.onEventMove}"/>
</p:schedule>
를 관리 3,691,363,210
출력용
Adding to model the Fri Feb 03 00:00:00 CET 2012 // ManagedBean.getModel()
Moving event to Wed Feb 08 00:00:00 CET 2012 // ManagedBean.onEventMove()
Moved Wed Feb 08 00:00:00 CET 2012 // SessionBean.move()
// No PrePersist log statement
:
- EJB 3
- JPA 2는 EclipseLink
- 글래스 피쉬 3
- JSF 의해 관리 MySQL로 JTA 연결 2
- Primefaces 3
해결 방법 :
제임스의 대답에 따라, 문제는 임시 필드는 EclipseLink 치료로 자리 잡고 있습니다.
링크 : http://wiki.eclipse.org/Using_EclipseLink_JPA_Extensions_(ELUG)#How_to_Use_the_.40Mutable_Annotation이
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "DTE_STR", nullable = false)
@Mutable(true) // Solution
@NotNull
private Date start;
DefaultScheduleModel의 정의를 추가 할 수 있습니까? – perissf
@perissf http://www.dzeek.net/javadoc/primefacesdocs/org/primefaces/model/DefaultScheduleModel.html – klonq
감사합니다. 난 calendarSession.move (calendarEvent)를 볼 수 있지만 CalendarSessionBean에는 moveEvent가있다. calendarSession을 AgendaMBean으로 가져 오는 방법은 무엇입니까? 예외가 있습니까? – perissf