【问题标题】:@ManyToOne @OneToMany Mapping , foreign key is null@ManyToOne @OneToMany 映射,外键为空
【发布时间】:2020-09-14 13:31:52
【问题描述】:
@Entity
@Data
@NoArgsConstructor
public class Offer {
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;
}

@Data
@EqualsAndHashCode
@Entity
@NoArgsConstructor
public class User  {
    @OneToMany(mappedBy = "user",cascade = CascadeType.ALL,fetch=FetchType.LAZY)
    private Set<Offer> offers = new HashSet<Offer>();
}

如果用户表中的映射正确,请提供帮助.user_id 列有空值 ....:(

【问题讨论】:

  • 主要的 Id 生成策略在哪里?
  • 它们以“@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Columnprivate Integer id;”的形式存在。
  • 仍然没有帮助 user_id 在 offer 表中始终为 NULL,请帮助

标签: java hibernate orm one-to-many lombok


【解决方案1】:

我不确定这些是否只是实体的一部分,但为了让实体拥有一个 id,您需要为其提供一个并将相关字段注释为 @Id。 我也使用@GeneratedValue(strategy = GenerationType.IDENTITY) 所以每个表都会得到它自己的id(由Hibernate生成,当你保存一个新实体而不是全局id时你不提供id,否则假设你添加一个提供,您获得值为 x 的 id,然后添加新用户,您获得值为 x+1 的 id,依此类推......

@Entity
@Data
@NoArgsConstructor
public class Offer {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name = "user_id", referencedColumnName = "id")
    private User user;

}



@Data
@EqualsAndHashCode
@Entity
@NoArgsConstructor
public class User  {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
   private long id;
     @OneToMany(mappedBy = "user",cascade = CascadeType.ALL,fetch=FetchType.LAZY)
    private Set<Offer> offers = new HashSet<Offer>();
}`

【讨论】:

  • 问题仍然存在.....作为user_id在offer类中生成的coloumn是NULL,它是offer表中的外键......:(尝试了一切。
  • @AbhishekSinghal 你能展示你将实体保存到数据库的方式吗?您是否使用用户对象保存报价?它适用于我的机器。
猜你喜欢
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 2015-02-13
  • 2018-06-12
  • 2019-09-23
  • 2016-03-21
  • 2011-11-15
  • 2018-02-02
相关资源
最近更新 更多