【问题标题】:How to fix ' attempted to assign id from null one-to-one property '如何修复'试图从空的一对一属性分配 id'
【发布时间】:2019-06-24 21:02:44
【问题描述】:

我正在开发一个带有 spring boot 的电子图书馆应用程序,它允许用户订购书籍(这些数据保存在 OrderDetails 表中)。每当我尝试为某个用户保存订购的书时,它都会给我以下异常:

org.hibernate.id.IdentifierGenerationException: 试图分配 id 从 null 一对一属性 [com.springboot.library.domains.OrderDetails.book]


这里是 OrderDetails 类:

@Entity
 public class OrderDetails{

    @EmbeddedId
    private OrderDetailsKey key;

    @ManyToOne
    @MapsId("bookId")
    @JoinColumn(name = "book_id")
    private Book book;

    @ManyToOne
    @MapsId("userId")
    @JoinColumn(name = "app_user_id")
    private AppUser appUser;

    private Integer quantity;

    public void setBook(Book book) {
    this.book = book;

}

     // other getters and setters

}

图书课

@Entity
public class Book {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", insertable = false, updatable = false)
private Long id;

private String isbn;

private String title; 

//some other fields

@OneToMany(mappedBy = "book", cascade = CascadeType.ALL, orphanRemoval = true)
private Set <OrderDetails> orderDetails;

//getters and setters
**strong text**}

根据我看到的一些类似示例,我需要在 OrderDetails 类中初始化 book 属性,但我不知道该怎么做:

类似这样的东西,除了 setOrderDetails 方法需要 Set&lt;OrderDetails&gt; 而我只传递一个,这就是我卡住的地方

public void setBook(Book book) {
    this.book = book;
    book.setOrderDetails(this);

}

非常感谢任何帮助:)

【问题讨论】:

    标签: spring-boot


    【解决方案1】:

    通常,当尝试持久化没有 @Id 注释的 @Entity 时,就会发生这种情况。这个错误仅仅意味着,当 hibernate 试图持久化时,它试图提出一个 PRIMARY KEY 属性,但它失败了,因为它来自 Book 对象,它是空的。

    考虑将您的代码调试到持久化点,并在那里检查要持久化的实体 (OrderDetails) 是否具有非空主键 (Book)。

    关于第二个问题:

    根据我看到的一些类似示例,我需要在 OrderDetails 类中初始化 book 属性,但我不知道该怎么做:

    你写的是对的。您只需为 OrderDetails 对象提供一个 Book 对象即可使用。因为 OrderDetails 对象有一个 Book 属性(这是正确的),所以您只需要在 OrderDetails 对象上编写一个“setter”,这是一种设置对象内部属性的方法,就像您已经做的那样。

    另外,由于 OrderDetails 和 Book 之间存在双向关系,请考虑使用 mappedBy annotation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 2021-12-25
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2012-06-21
      • 1970-01-01
      相关资源
      最近更新 更多