Hibernate连接表“无效的列名” [重复]

Posted

技术标签:

【中文标题】Hibernate连接表“无效的列名” [重复]【英文标题】:Hibernate join table "invalid column name" [duplicate] 【发布时间】:2016-03-09 00:52:40 【问题描述】:

我有两张桌子。 CategoryMaster和PotentialProject

PotentialProject [potentialProjectID, typeOfProject]

CategoryMaster  [CategoryID, CategoryName]

我想加入 typeOfProject 和 categoryID。

@Entity
@Table(name="CategoryMaster")
public class CategoryMaster

    @Id
    @Column(name="CategoryID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer CategoryID;
    private String CategoryName;

    @OneToOne
    @JoinColumn(name="typeOfProject")
    private PotentialProject potentialProject;

    //getter 
    //setter


@Entity
@Table(name="PotentialProject")
public class PotentialProject

    @Id
    @Column(name="PotentialProjectID")
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer potentialProjectID;
    private int typeOfProject;

    @OneToOne(mappedBy="potentialProject")
    private CategoryMaster categoryMaster;

    //getter 
    //setter

hibernate 中的错误信息是无效的列名 typeOfProject。请给我一些建议。谢谢。

【问题讨论】:

您能完整发布您的实体吗? 是的。请查看更新。 检查您的数据库。 DB 中的列名很可能与您映射的内容不匹配。而且,为什么要使用这种命名不一致的数据库方案? @JoinColumnmappedBy 不正确,请参阅链接副本。您还缺少一些@Column,例如CategoryName @RC 他不需要@Column@JoinColumn@OneToOne 【参考方案1】:

看来是对的

@OneToOne(mappedBy="potentialProject")
private CategoryMaster categoryMaster;

但这是不正确的

@OneToOne
@JoinColumn(name="typeOfProject")
private PotentialProject potentialProject;

name 是外键列的名称!所以你的代码应该是这样的

@OneToOne
@JoinColumn(name="fk_potential_project")
private PotentialProject potentialProject;

【讨论】:

@RC 不要急于和 -1 人在一起 ;) 多想!【参考方案2】:

谢谢兄弟@RC 和@v.ladynev。我有一个解决方案。我将双向映射更改为单向映射。所以

@OneToOne
@PrimaryKeyJoinColumn  
private CategoryMaster categoryMaster;

在 CategoryMaster 中无事可做。

谢谢兄弟们。

【讨论】:

不客气。但目前尚不清楚我的解决方案。它是正确的还是不正确的。 :)

以上是关于Hibernate连接表“无效的列名” [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无效的列名异常 - 使用别名的 JdbcPagingItemReader 查询

带有连接表的双向@ManyToOne 创建重复键

实体框架无效的列名

查询中的 SQL 无效列名检测

无效的列名“销售季度”错误消息

为啥我会收到“无效的列名”?消息 207 级别 16 状态 1 第 14 行