@ConversationScoped
bean을 가진 Seam 3/JBoss/Hibernate 프로젝트가 있습니다. 이 빈은 @Entity
의 작성/편집을 관리합니다. 엔티티에 대한 변경 사항을 저장하고 현재 페이지에 사용자를 유지하고 싶습니다.Seam 3/Hibernate에서 DB로 플러시하지 않는 엔티티로 변경
@Named
@Stateful
@ConversationScoped
public class TeamManagementBean implements Serializable {
@PersistenceContext(type = PersistenceContextType.EXTENDED)
private EntityManager entityManager;
@Inject
Conversation conversation;
@Inject
FlushModeManager flushModeManager;
protected Team team;
@Inject
@CurrentUser
private User currentAccount;
@Begin
public void loadTeam(Team team) {
if(conversation.isTransient()) conversation.begin();
flushModeManager.setFlushModeType(FlushModeType.MANUAL);
this.team = team;
}
public void save() {
if(team.isUnsaved()) entityManager.persist(team);
entityManager.flush();
}
save()
가 호출되면, 대화의 엔티티 (즉 변경 대화와 웹 페이지에 표시된다. 그러나, 데이터가 데이터베이스에 기록되지 않는 경우에도 업데이트됩니다 나는 사이트의 다른 부분에
save()
메소드가 호출되었을 때
faces-config.xml
가 다른 페이지로 리디렉션함으로써 데이터베이스에 엔터티를 업데이트 할 수 있었다. 대화를 종료합니다.하지만 난 계속하고 싶습니다 이 엔티티를 저장할 때 같은 페이지의 사용자
내가 명확히하지 않은 것처럼 보입니다. 위의 코드에서 영속성이 잘 작동합니다. 나는 새로운'Team'을 만드는 메소드를 생략하고 새로운'Team'을 생성하고 저장하면'persist() '를 사용하여) DB에 잘 씁니다. 문제는 이미 DB에있는 엔티티를 업데이트하려고 할 때입니다. – jcavazos
엔티티를 업데이트하기 위해 persist()를 사용합니까? –
아니요, 아닙니다. persist()는 새로 생성 된 엔티티를 데이터베이스에 저장하는 용도로만 사용되었다고 생각했습니다. – jcavazos