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;
我的问题是从这个错误开始的:"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;