0

我正在尝试使用 JPA 构建一些简单的表,但我无法让它们正常工作。我总共有 4 个表:lookupgroupkeywordgroupkw

查找表有一个 Id 字段。这个lookup.id字段在其他表中用作外键。

在表group中,一个id列作为主键加入了lookupid列;关键字表中,一个id列也作为主键加入了lookupid列。

最后一个表是groupkw表,它有三列:kwidgroupidlookupidkwidlookupid映射到 表Keyword中的列idlookupidgroupidlookupid映射到表group中的列“id”和“lookupid” 。

对于groupkeyword,我编写了带注释的 java 类来表示它们,并且根据单元测试,它们工作正常。但是对于表groupkw,我无法获得正确的注释类。

我为表groupkw编写了一些代码:

@NotNull
@ManyToOne
@JoinColumns({
@JoinColumn(name="kwid", referencedColumnName = "id", nullable = false),
@JoinColumn(name="lookupid", referencedColumnName = "lookupid", nullable = false)
})
public Keyword getKeyword() {
  return keyword;
}

@NotNull
@ManyToOne
@JoinColumns({
@JoinColumn(name="groupid", referencedColumnName = "id", nullable = false),
@JoinColumn(name="lookupid", referencedColumnName = "lookupid",
nullable = false, insertable=false, updatable=false)
})
public Group getgroup() {
  return group;
}

但似乎不起作用,EntityManagerFactory 无法创建groupkw表。请让我知道这是实现此表的正确方法还是有其他方法可以做到这一点?

4

1 回答 1

0

您不能将列映射两次,您的lookupid列就是这种情况。你让它变得比必要的更难。

如果我理解正确,您有以下关联:

  • 查找 - 一对多 - 组
  • 查找 - OneToMany - 关键字
  • 组 - 多对多 - 关键字

如果是这样,您不需要将 groupkw 表映射为实体:它是一个连接表,可以由 JPA 处理。

您只需 :

  • 查找(ID PK)
  • 组(id PK,lookupId FK)
  • 关键字(id PK,lookupId FK)
  • GroupKeyWord (groupId FK, keywordId FK), the PK of this table being the tuple (groupId, keywordId).
于 2012-04-16T11:28:28.403 回答