我已经创建了一个带有一些表的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中找到有关多对多关系的更多详细信息。
根据您的设计,您必须对所有列表重复上述代码。