gpt4 book ai didi

java - JPA 验证 - OneToOne 到同一张表

转载 作者:行者123 更新时间:2023-11-30 11:19:59 25 4
gpt4 key购买 nike

我刚刚在 eclipse 中启用了 JPA 验证并显示了一些错误(代码实际上运行良好)。

我有一个文章实体,它包含对下一篇文章和上一篇实体(相同类型)的引用。验证者提示消息:

Column "nextArticle" cannot be resolved on table "article"

这到底是什么意思? SQL 表也有列。我还尝试使用“mappedBy”和“JoinColumn”注释将变量相互映射,但无法解决验证错误。

这是类和验证错误:

enter image description here

那是映射: enter image description here

编辑:尝试了 anttix 的建议:表中的列被命名为“nextArticle_id”和“prevArticle_id”,所以我想出了该代码:

@OneToOne(mappedBy = "prevArticle")
@JoinColumn(name = "nextArticle_id")
public Article getNextArticle() {
return nextArticle;
}

@OneToOne(mappedBy = "nextArticle")
@JoinColumn(name = "prevArticle_id")
public Article getPrevArticle() {
return prevArticle;
}

但是 validator 现在提示带有消息的“mappedBy”注释:

In attribute 'prevArticle', the "mapped by" attribute 'nextArticle' has an invalid mapping type for this relationship.

编辑 2:我找到了解决方案。我必须使用 @Column 注释告诉 validator 实际数据库中列的名称,如下所示:

enter image description here

最佳答案

Eclipse 在表中找不到名为 prevArticle 的列。您应该为 nextArticle 指定列名称并创建与 prevArticle 的双向关系以指示它不需要自己的外键列。

@OneToOne
@JoinColumn(name = "next_id")
private Article nextArticle;

@OneToOne(mappedBy = "nextArticle")
private Article prevArticle;

如果需要,您可以从 nextArticle 中省略 @JoinColumn,但我会保留它以明确哪个关系“拥有”外键列。

另见:

关于java - JPA 验证 - OneToOne 到同一张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22972241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com