Hibernate 查询 Postgresql 数据库中的奇怪 table 名称 - "relation does not exist"

Weird table name in Hibernate query over Postgresql database - "relation does not exist"

我的问题是从这个错误开始的:"relation "tag_article_tag" 不存在。

来自标签 class:

@Entity
@Table(name = "tag")
public class Tag {
...
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<ArticleTag> articleTags;
...

来自文章 class:

@Entity
@Table(name = "article")
public class Article {
...
@OneToMany(mappedBy = "article", fetch = FetchType.EAGER, cascade =    CascadeType.ALL)
private Set<ArticleTag> articleTags;

我的中介table/实体:

@Entity
@Table(name = "article_tag")
public class ArticleTag {
...
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "article_id")
private Article article;

@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "tag_id")
private Tag tag;

我已经激活了 Hibernate 的 show_sql 属性 来进行一些调试,在某些时候它试图 select 来自这个 table 的东西:"tag_article_tag"。我发现它与标签 class ("tag") 中的名称和具有 ArticleTag 类型元素的集合 articleTags 的名称有关 (table name "article_tag")。我已将名称从 tag 更改为 tag1,但错误是:"tag1_article_tag"。

我知道这个问题在某种程度上与对象集有关,但我不知道具体是什么。有什么想法吗?

当我发布这个问题时,我发现了问题:)。

在文章 class 中,我忘记了 mappedBy 字段。

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<ArticleTag> articleTags;

应该包含 mappedBy 字段:

@OneToMany(**mappedBy="tag"**, cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<ArticleTag> articleTags;