Mysql
 sql >> Base de données >  >> RDS >> Mysql

Problème d'hibernation :l'annotation @OneToMany renvoie des doublons

Vous devrez peut-être modifier votre méthode comme suit :

@SuppressWarnings("unchecked")
@Transactional
public Collection<Entry> findEntries() {
    return sessionFactory.getCurrentSession()
      .createCriteria(Entry.class)
      .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY)
      .list();
}

Changez également les addresses à un Set :

@OneToMany(fetch=FetchType.EAGER)
@JoinColumn(name = "id")
private Set<EntryAddress> addresses;

Modifier :

Oh... Dans EntryAddress vous avez id défini comme @Id mais ce n'est pas unique. Vous devriez faire id la clé primaire et faites-la s'incrémenter automatiquement comme vous le faites dans Entry . Créez ensuite un autre champ dans EntryAddress c'est la clé étrangère de Entry appelé quelque chose comme entry_id .