gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 02:10:17 25 4
gpt4 key购买 nike

我有 2 个表(User 和 Feed)通过外键链接。之后,我使用 Spring Boot 和 Hibernate 进行查询以打印出 Feed 表中的所有值。但是当谈到外键及其值时,我的实体似乎出错了,当我已经有一个外键列时,它会即时创建一个新列。

我能知道我做错了什么吗?此 JPA 设置的新功能。对于我是应该先创建我的模式还是让 JPA 根据我的实体设置来处理事情感到困惑。很明显,我错过了一些重要的东西,但就是不能 Handlebars 指放在上面。请协助。

问题是如何映射到外键?在将 Feed 表的外键 'owner_name' 映射到实体上的用户表的 'username' 时?

表结构

enter image description here

实体

用户实体

@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;
}

供稿实体

@Entity
public class Feed {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "feed_id")
private long feedId;

@Column(name = "title")
private String title;

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

@Basic
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "updated_at")
private Date updatedAt;

@ManyToOne
@JoinColumn(name = "username")
// @Column(name = "owner_name")
private User ownerName;
}

我的查询只是获取所有 Feed 数据,我确实获取了所有数据减去外键值(结果为 null)。 (期望获得外键值)。

我的 Controller 正在调用这个方法,我得到的所有结果都减去外键值。

public interface FeedRepository extends JpaRepository<Feed, Long> {
@Query("select f from Feed as f order by f.createdAt desc")
List<Feed> getCurrentFeeds();
}

表格内的测试值。

用户表数据

enter image description here

Feed 表数据

enter image description here

如果我运行我当前的代码,我最终会在运行中得到一个额外的列,如下所示,这是我不想要的,如上所述。

enter image description here

最佳答案

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

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

您实际上不需要定义引用列,但我已将其定义为完成,以便您了解什么是什么。

关于java - 实体映射正在动态创建不需要的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54610162/

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