【问题标题】:ManyToOne realtionship in Java Spring BootJava Spring Boot中的ManyToOne关系
【发布时间】:2021-04-26 10:22:33
【问题描述】:

嗯,我有一个班级Feeding.java 和一个班级User.java

一个 Feed 应该有一个 User,但一个 User 可以有多个 Fe​​ed。

这是我的Feeding.java 班级:

@Getter
@Setter
@EqualsAndHashCode
@NoArgsConstructor
@Entity
@Table(name = "tblFeeding")
public class Feeding {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idFeeding;
    private LocalDateTime dateFeeding;
    private double amountFeeding;
    private String foodFeeding;
    @ManyToOne
    @JoinColumn(name = "id_user")
    private User user;
}

这是我的User.java 班级:

@Entity
@Getter
@Setter
@Table(name = "tbl_User")
public class User implements UserDetails {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer idUser;
    private String nameUser;
    private String email;
    private String passwordUser;

目前的问题是我可以使用不存在的 userId 保存喂养对象,这应该是不可能的。

【问题讨论】:

  • 这些表是否已经存在或者您已经使用 Hibernate ORM 创建了它们?
  • @Davide 我用 Hibernate ORM 创建它们
  • 是否也创建了外部约束(您可以启用查询记录)?你是怎么做插入的?数据库中是否存在外部约束?您使用的是哪个数据库?

标签: java spring-boot spring-data-jpa spring-data


【解决方案1】:

缺少外部约束。如果您使用 Hibernate ORM 创建了表,则不应该发生这种情况,但如果您以不同的方式创建了表,则可能没有创建外部约束。

您需要运行类似于以下的 SQL 查询:

ALTER TABLE Feeding
ADD CONSTRAINT id_user_fk
FOREIGN KEY (id_user) REFERENCES User;

请注意,查询可能不同,您需要检查数据库的确切查询。

此查询来自Hibernate ORM documentation example for many-to-one associations

【讨论】:

  • 如果我做 ALTER TABLE 我仍然可以输入一个不存在的 id
  • 你用的是什么数据库?
  • 我正在使用 MySql
  • 您进行插入的方式可能有问题。确保提交事务,我们需要查看代码以帮助您
猜你喜欢
  • 2021-06-15
  • 2021-08-17
  • 2019-10-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多