Как обновить дочерние строки объекта, который имеет ассоциацию OneToMany - PullRequest
0 голосов
/ 27 мая 2019

Я работаю над проектом Java и застрял при попытке обновить объект с помощью ассоциации oneToMany. Вот мои классы:

Team.class

    @Entity
    @Table(name = "TEAM", schema = SchemaRef.NOM_SCHEMA_REF)
    @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = CacheRegion.CACHE_TEAM)
    public class TEAM extends TeamPrincipal {

        /**
         * long serialVersionUID.
         */
        private static final long serialVersionUID = -7697301560938121726L;

        /** The players . */
        @OneToMany(mappedBy = "tm", cascade = CascadeType.ALL, orphanRemoval = false)
        @Fetch(FetchMode.SUBSELECT)
        @LazyCollection(LazyCollectionOption.FALSE)
        @Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = CacheRegion.CACHE_TEAM)
        private Set<Player> listPlayers;

//Getters & Setters

    }

Player.class

@Entity
@Table(name = "PLAYER", schema = SchemaReferentiel.NOM_SCHEMA_REF)
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE, region = CacheRegion.CACHE_TEAM)
public class Player extends DomainObject {

    /**
     * long serialVersionUID.
     */
    private static final long serialVersionUID = -7697301560938121726L;

    /** The id. */
    @Id
    @SequenceGenerator(
                       name = "SequenceIdGenerator",
                       sequenceName = SchemaReferentiel.NOM_SCHEMA_REF + ".SEQUENCE_PLAYER",
                       allocationSize = 1)
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SequenceIdGenerator")
    @Column(name = "PLAYER_ID")
    private long id;

    /** The Player. */
    @ManyToOne
    @JoinColumn(name = "lTeam_Player", referencedColumnName = "id", nullable = false)
    @ForeignKey(name = "C_FK_PlTeam_Player")
    private Team team;

//getters and setter
}

Вызывающим методом DAO является TeamDao.java :

sessionFactory.getCurrentSession().saveOrUpdate(toSave);

Проблема Iя сталкиваюсь с этим отображением, когда я пытаюсь обновить команду, изменяя список игроков, она обновляет атрибуты Team , но игроков всегда такие же, как при добавлении.

Создание выполнено правильно, в режиме отладки при попытке обновления команда содержит новый список игроков для обновления, после вызова метода DAO родительский элемент ( TEAM ) обновляетсяно дети ( игроки ) не

1 Ответ

0 голосов
/ 27 мая 2019

Поскольку это двунаправленное отображение, убедитесь, что вы установили игроков для команды и задали команду для каждого из игроков:

team.setPlayers(players);

for(Player player: players){
   player.setTeam(team);
}

sessionFactory.getCurrentSession().saveOrUpdate(team);
...