【问题标题】:JPA not creating database entry for many to many relationshipJPA没有为多对多关系创建数据库条目
【发布时间】:2021-03-16 10:34:01
【问题描述】:

我有这两个类(缩短):

@Entity
public class ClanPlayer {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private int id;
    @ManyToMany(mappedBy = "players")
    private List<PhoenixPermission> permissions = new ArrayList<>();

    public ClanPlayer() {}

    public List<PhoenixPermission> getPermissions() {
        return permissions;
    }

    public void setPermissions(List<PhoenixPermission> permissions) {
        this.permissions = permissions;
    }

    public void addPermission(PhoenixPermission permission) {
        EntityManager em = EMUtils.getEntityManager();
        em.getTransaction().begin();
        permissions.add(permission);
        em.getTransaction().commit();
    }
}

@Entity
public class PhoenixPermission {
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Id
    private int id;
    @ManyToMany
    @JoinTable(name = "PLAYER_PERMISSION")
    private List<ClanPlayer> players = new ArrayList<>();

    public PhoenixPermission() {}

    public List<ClanPlayer> getPlayers() {
        return players;
    }

    public void setPlayers(List<ClanPlayer> players) {
        this.players = players;
    }
}

现在,当使用 PhoenixPermission-Entity 对象调用 addPermission 方法时,ArrayList 'permissions' 已更新,但 'PLAYER_PERMISSION' 表的数据库中没有新的元组。

调试日志未显示此表的任何插入查询。 所有其他实体管理器操作都工作正常。 我认为我的注释有问题,但我不确定。 有什么想法吗?

【问题讨论】:

  • 您应该了解关系拥有方的概念:它负责维护关系,因此只有在拥有方发生更改时才会更新数据库。在您的情况下,拥有方是PhoenixPermission .players,因此您需要添加一个新玩家来获取更新。 (ClanPlayer.permissions 在其@ManyToMany 中有mappedBy = "players" - 这就是您可以判断它不是 拥有方但players 是)。

标签: java jpa eclipselink


【解决方案1】:

找到了。 我只需要更新这两个对象。这是更新后的addPermission 方法:

public void addPermission(PhoenixPermission permission) {
    EntityManager em = EMUtils.getEntityManager();
    em.getTransaction().begin();
    permissions.add(permission);
    permission.getPlayers().add(this);
    em.getTransaction().commit();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2015-04-19
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    相关资源
    最近更新 更多