Java 实体映射正在动态创建不需要的列

Java 实体映射正在动态创建不需要的列,java,mysql,hibernate,spring-boot,jpa,Java,Mysql,Hibernate,Spring Boot,Jpa,我有两个表(用户和提要)通过外键链接。接下来,我将使用SpringBoot和Hibernate进行查询,以打印出提要表中的所有值。但是当涉及到外键及其值时,我的实体似乎出了问题,在我已经有了外键列的情况下,它会动态创建一个新列 我能知道我做错了什么吗?新的JPA设置。我甚至不知道我应该先创建模式,还是让JPA根据我的实体设置来处理事情。很明显,我错过了一些重要的东西,但我就是无法指出。请帮忙 问题是如何映射到外键?与在实体上将提要表的外键“owner\u name”映射为用户表的“usernam

我有两个表(用户和提要)通过外键链接。接下来,我将使用SpringBoot和Hibernate进行查询,以打印出提要表中的所有值。但是当涉及到外键及其值时,我的实体似乎出了问题,在我已经有了外键列的情况下,它会动态创建一个新列

我能知道我做错了什么吗?新的JPA设置。我甚至不知道我应该先创建模式,还是让JPA根据我的实体设置来处理事情。很明显,我错过了一些重要的东西,但我就是无法指出。请帮忙

问题是如何映射到外键?与在实体上将提要表的外键“owner\u name”映射为用户表的“username”一样

表结构

实体

用户实体

@Entity
public class User {
    @Id
    @Column(name = "username")
    public String username;

    @Column(name = "email")
    public String email;

    @Column(name = "password")
    public String password;

    @Basic
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_at")
    private Date createdAt;

    @Column(name = "online_status")
    private long onlineStatus;

    @Column(name = "account_status")
    private long accountStatus;

    //updated this based on Gopi's suggestion
    @OneToMany(mappedBy = "ownerName")
    private List<Feed> feeds;
}
我的查询只是获取所有提要数据,其中我获取的所有数据减去外键值,外键值为null。(希望改为获取外键值)

我的控制器正在调用此方法,在该方法中,我得到的所有结果都小于外键值

public interface FeedRepository extends JpaRepository<Feed, Long> {
    @Query("select f from Feed as f order by f.createdAt desc")
    List<Feed> getCurrentFeeds();
}
公共接口FeedRepository扩展了JpaRepository{
@查询(“按f.createdAt desc从提要中选择f作为f订单”)
列出getCurrentFeeds();
}
测试表中的值

用户表数据

提要表数据

如果我运行我当前的代码,我最终会得到一个额外的列,如下所示,我不希望如上所述


您好这并不奇怪,您已经将实际引用的列指定为@JoinColumn的name属性。您需要在提要表中指定外键列,即“所有者\名称”。@JoinColumn的正确完整定义为:

@JoinColumn(name="owner_name",referencedcolumn = "username")
    private User ownerName;

实际上,您不需要定义referencedcolumn,但我已经为完成而定义了它,以便您了解什么是什么。

您需要创建一个双向映射,即一对多和多对一。请参阅此[链接]尝试用
@JoinColumn(name=“ownerName”)
@Gopi替换您的join列描述。我会查找它,但这是必须的吗?Cos当前不需要用户表引用提要表。是的,当您定义外键关系时(如果您的父项是否有子记录),您仍然需要定义映射。否则,hibernate将创建不需要的列或表。@Gopi我删除了该附加列,并基于该链接将以下内容添加到提要实体中。但是,在再次创建附加列时仍然会得到相同的结果@OneToMany(mappedBy=“ownerName”)私有列表源;完美的现在工作。但是我很困惑。我可以发誓,当我不使用referencedcolumn=“username”时,我遇到了stackoverflow错误。但现在不管有没有它,它都在工作。。。。很遗憾,无法重新创建错误。@Trevor_zam您不需要referencedcolumn,当引用的列是PK时,hibernate生成的默认值是合理的。您的错误是您在开始时指定了@JoinColumn(name=“username”):)而不是@JoinColumn(name=“owner\u name”),我明白您的意思。但我确实根据JB Nizet在上述评论中的建议纠正了这一点。不知道我错过了什么,但我一定是做错了什么。谢谢,现在可以用了。
@JoinColumn(name="owner_name",referencedcolumn = "username")
    private User ownerName;