【问题标题】:How to update children rows of an object that has OneToMany association如何更新具有 OneToMany 关联的对象的子行
【发布时间】:2019-10-12 22:55:39
【问题描述】:

我正在处理一个 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);

我在使用此映射时遇到的问题是,当我尝试通过更改玩家列表来更新团队时,它会更新 Team 属性,但 Players 始终是与添加时相同。

创建已正确完成,在调试模式下尝试更新时,团队包含要更新的新玩家列表,在调用 DAO 方法后,父 (TEAM) 已更新,但孩子们(玩家)不是

【问题讨论】:

    标签: java hibernate jpa orm mapping


    【解决方案1】:

    由于这是一个双向映射,请确保您为一个团队设置了球员,并为每个球员设置了球队:

    team.setPlayers(players);
    
    for(Player player: players){
       player.setTeam(team);
    }
    
    sessionFactory.getCurrentSession().saveOrUpdate(team);
    

    【讨论】:

    • 谢谢#Maciej Kowalski 我做到了,但没有任何变化,子行仍然被忽略。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 1970-01-01
    • 2019-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    相关资源
    最近更新 更多