JPA验证 - OneToOne到同一个表

时间:2014-04-09 19:30:18

标签: java eclipse hibernate validation jpa

我刚刚在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;
}

但验证者现在抱怨“mappedBy”注释带有消息:

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

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

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

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

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

另见: