java - 实体映射正在动态创建不需要的列
问题描述
我有 2 个表(用户和提要)由外键链接。之后,我使用 Spring Boot 和 Hibernate 进行查询以打印出 Feed 表中的所有值。但是当涉及到外键及其值时,我的实体似乎出错了,当我已经有一个外键列时,它会动态创建一个新列。
我能知道我做错了什么吗?此 JPA 设置的新手。对我是否应该首先创建我的模式或让 JPA 根据我的实体设置来处理事情感到困惑。显然,我错过了一些重要的东西,但就是不能指望它。请协助。
问题是如何映射到外键?就像在实体上将 Feed 表的外键“所有者名称”映射到用户表的“用户名”一样?
表结构
实体
用户实体
@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;
}
我的查询只是获取所有提要数据,其中我得到的所有数据减去外键的值,外键值显示为空。(期望获得外键值)。
我的控制器正在调用这个方法,我得到的所有结果都减去外键值。
public interface FeedRepository extends JpaRepository<Feed, Long> {
@Query("select f from Feed as f order by f.createdAt desc")
List<Feed> getCurrentFeeds();
}
测试表内的值。
用户表数据
Feed 表数据
如果我运行我当前的代码,我最终会得到一个额外的列,如下所示,我不希望如上所述。
解决方案
嗨,这并不奇怪,您已将实际引用的列指定为 @JoinColumn 的名称属性。您需要在 Feed 表中指定外键列,即“所有者名称”。@JoinColumn 的正确完整定义是:
@JoinColumn(name="owner_name",referencedcolumn = "username")
private User ownerName;
您实际上不需要定义referencedcolumn,但我已将其定义为完成,以便您了解什么是什么。
推荐阅读
- java - 第K个最小元素和第K个元素?
- typescript - 从泛型函数的声明中获取参数 - TypeScript 3.3
- vba - 对相同的“with...”参数使用多个集合(或其他类型)?
- python - Zipfile namelist() 缺少存档中的成员
- python - Django - 使用 slug 和 kwargs 重定向 reverse()
- python - py2exe:无法用 pandas 制作 exe
- python - 如何在 python pandas 中使用 df.loc 和 if 条件删除一行
- python-3.x - 年度数据预测
- python - 如果表格行大小超过 10,Pandas 将在下一行打印列
- python - 将 DataFrame 的每 n 个索引乘以(或除)数组中的常量