我已经创建了一个带有一些表的mySQL数据库,与我的问题相关的是Players和Season。

餐桌季节包含:

Season_id (int),seasonNumber(int),total(int), week(int), value(int), totalsell(int)


我有Java代码,在其中创建了实体,并使用注释标识了实体以及每个实体的主键。

以下是我的Season POJO课的内容:

private int id;
private LinkedList<Player> keepers;
private LinkedList<Player> defs;
private LinkedList<Player> inners;
private LinkedList<Player> wings;
private LinkedList<Player> innersTreino;
private LinkedList<Player> strikers;
private LinkedList<Player> strikersTreino;
private int seasonNumber;
private LinkedList<Player> vendas;
private LinkedList<Player> sold;
private int total;
private int week;
private int value;
private int totalsell;


之后,我创建了我的entitymanagerFactory和实体管理器,并尝试测试是否可以填充数据库:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("htTeamPU");
  EntityManager em = emf.createEntityManager();

  em.getTransaction().begin();
  Season test = new Season();
  test.setSeasonNumber(43);
  test.setTotal(5);
  test.setWeek(100);
  test.setValue(200);
  test.setTotalsell(10);

  em.persist(test);
  em.getTransaction().commit();
  em.close();
  emf.close();


当我运行程序时,我有一个例外:

Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'DEFS' in 'field list'


问题似乎是我的对象是9个链表的球员名单,而我没有在赛季表中代表他们。我真的不知道如何在我的赛季表上代表链表来解决我的问题。

最佳答案

您应该与Player和Seoson表建立多对多关系。

对于您的清单之一;

在拥有方(Seoson)

@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE})
@JoinTable(name = "seoson_keepers",
            joinColumns = { @JoinColumn(name = "Seoson_id")},
            inverseJoinColumns={@JoinColumn(name="Player_id")})
private List<Player> keepers;


在反面(播放器)

@ManyToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE},
            mappedBy = "keepers")
private List<Seoson> seosons;


您可以在jpa here中找到有关多对多关系的更多详细信息。

根据您的设计,您必须对所有列表重复上述代码。

10-05 20:50
查看更多