2016-10-01 2 views
2

Я пытаюсь сохранить объект (Sortie), где пользователь подключен. , поэтому у меня есть один администратор, который влияет на вылазок для пользователя, но у меня есть этот выпуск, когда пользователь подключен, значит, когда объект уже находится в сеансе. Как я могу сохранить объект Sortie, пока все пользователи подключены. вот мой код:a Другой объект с тем же значением идентификатора уже был связан с сеансом

Модель Sortie

@Entity 
public class Sortie implements Serializable { 
@Id 
@GeneratedValue(strategy = GenerationType.AUTO) 
private Integer id; 
private Date dateSortie; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "id_utilisateur", nullable = false) 
private Utilisateur utilisateur; 
@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "id_recepteur", nullable = false) 
private Utilisateur recepteur; 

.... } 

Объекты DAO:

AbstarctDao:

public abstract class AbstractDao<PK extends Serializable, T> { 

private final Class<T> persistentClass; 

@SuppressWarnings("unchecked") 
public AbstractDao() { 
    this.persistentClass = (Class<T>) ((ParameterizedType) this.getClass().getGenericSuperclass()) 
      .getActualTypeArguments()[1]; 
} 

@Autowired 
private SessionFactory sessionFactory; 

protected Session getSession() { 
    return sessionFactory.getCurrentSession(); 
} 

@SuppressWarnings("unchecked") 
public T getByKey(PK key) { 
    return (T) getSession().get(persistentClass, key); 
} 

public void persist(T entity) { 
    getSession().persist(entity); 

} 

public void merge(T entity) { 
    getSession().merge(entity); 


} 

public void update(final T entity) { 
    Preconditions.checkNotNull(entity); 
    getSession().update(entity); 
} 

public void updateorsave(final T entity) { 
    Preconditions.checkNotNull(entity); 
    getSession().saveOrUpdate(entity); 
} 

public void delete(T entity) { 
    getSession().delete(entity); 
} 

protected Criteria createEntityCriteria() { 
    return getSession().createCriteria(persistentClass); 
} 

}

SortieDaoImp:

.... 
    public Sortie addSortie(Sortie sortie) { 
    merge(sortie); 
    return sortie; 
} 
..... 

Контроллер

...... 
Sortie sortie = new Sortie(); 
sortie.setUtilisateur(userService.findUserByUsername(getPseudoCo())); 
sortie.setRecepteur(commande.getUtilisateur()); 
Sortie exit = sortieService.addSortie(sortie); 
...... 

[Изменить]: я не могу очистить сессию, потому что я все еще нуждаются в obejct вылазку.

ответ

1

Я, наконец, нашел решение. поэтому я должен был использовать сохраняться на DAoImplementation так:

.... 
public Sortie addSortie(Sortie sortie) { 
persist(sortie); 
return sortie; 
} 
..... 

И создать METHODE обновления, который будет обновлять вылазку воздействуя пользователя.

@Override 
public void updateSortieRecepteur(Sortie sortie, Utilisateur recepteur) { 
    sortie.setRecepteur(recepteur); 
    update(sortie); 
} 

наконец я изменить контроллер:

...... 
Sortie sortie = new Sortie(); 
sortie.setUtilisateur(userService.findUserByUsername(getPseudoCo())); 
sortie.setRecepteur(commande.getUtilisateur()); 
Sortie exit = sortieService.addSortie(sortie); 
sortieService.updateSortieRecepteur(exit, commande.getUtilisateur()); 
...... 
Смежные вопросы

 Смежные вопросы