2016-10-01 8 views
2

私は、ユーザーが接続されているエンティティ(Sortie)を永続化しようとしています。 だから私はユーザーに分かれに影響を与える1つの管理者を持っていますが、私はこのissuは、ユーザーが接続されているときにオブジェクトがすでにセッションにあるときを意味します。 ユーザー全体が接続されている間、エンティティのソートを保持する方法はありますか。同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられていました

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:

モデル 出撃

@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: はここに私のコードです

.... 
    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; 
} 
..... 

そして、ユーザーに影響を与えることによってソーイを更新する更新メソッドを作成する。

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

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

最後に、私は、コントローラを変更します

関連する問題