A类包含一个B类列表和两个C类列表。B类还包含两个C类列表。如何映射?通过 ID 查找中断

问题描述 投票:0回答:1

我正在使用Spring + H2数据库开发一个桌面游戏。目前,我面临 ORM 问题。我有三个班级:

cards
players
tabletop

tabletop
类有两个
cards
列表和一个
players
列表。反过来,玩家有两个
cards
列表。我应该如何处理映射?

我可以成功地将数据保存到数据库,但是当我尝试为

tabletop
查找ById时,关联的对象变成了
null

我尝试使用以下方式绘制地图:

  @Entity
  public class Tabletop{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @OneToOne(mappedBy = "tabletop")
    private BaseCards baseCards;

    @OneToOne(mappedBy = "tabletop")
    private FieldCards fieldCards;

    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinColumn(name = "tabletop_id")
    private List<Player> players;
  }
  @Entity
  public class Player {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @OneToOne(mappedBy = "player")
    private PlayerHandCards handCards;

    @OneToOne(mappedBy = "player")
    private PlayerBinCards binCards;

  }
  @Entity
  public class PlayerHandCards {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @OneToMany( cascade = CascadeType.ALL)
    @JoinColumn(name="player_hand_id")
    List<Cards> Cards;

    @OneToOne
    @JoinColumn(name = "player_id")
    private Player player;

  }
  @Entity
  public class PlayerBinCards {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @OneToMany( cascade = CascadeType.ALL)
    @JoinColumn(name="player_bin_id")
    List<Cards> cards;

    @OneToOne
    @JoinColumn(name = "player_id")
    private Player player;

  }
  @Entity
  public class BaseCards {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @OneToMany( cascade = CascadeType.ALL)
    @JoinColumn(name="base_cards_id")
    List<Cards> cards;

    @OneToOne
    @JoinColumn(name = "Tabletop_id")
    private Tabletop tabletop;

  }

  @Entity
  public class FieldCards {
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    @OneToMany( cascade = CascadeType.ALL)
    @JoinColumn(name="field_cards_id")
    List<Cards> cards;

    @OneToOne
    @JoinColumn(name = "Tabletop_id")
    private Tabletop tabletop;

  }
  @Entity
  public class Cards{
    @Id
    @GeneratedValue(strategy= GenerationType.AUTO)
    private long id;

    private String color;

    private Integer value;

  }
java spring orm h2
1个回答
0
投票

没关系,我找到了解决方案和我的错误。 我创建了 2 个具有相同 id 的 @OneToOne 关系,我应该做的是

@OneToMany( cascade = CascadeType.ALL) @JoinTable( name = "player_hand_cards", joinColumns = @JoinColumn(name = "player _id"), inverseJoinColumns = @JoinColumn(name = "card_id") ) private List<Cards> playerHandCards = new ArrayList<>();

© www.soinside.com 2019 - 2024. All rights reserved.