首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复“尝试从空的一对一属性分配id”

如何修复“尝试从空的一对一属性分配id”
EN

Stack Overflow用户
提问于 2019-06-25 05:02:45
回答 1查看 1.1K关注 0票数 1

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

org.hibernate.id.IdentifierGenerationException:尝试从空的一对一属性com.springboot.library.domains.OrderDetails.book中分配id

下面是OrderDetails类:

代码语言:javascript
复制
@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

}

Book类

代码语言:javascript
复制
@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<OrderDetails>,而我只传递了一个,这就是我被卡住的地方

代码语言:javascript
复制
public void setBook(Book book) {
    this.book = book;
    book.setOrderDetails(this);

}

如果有任何帮助,我将非常感谢:)

EN

回答 1

Stack Overflow用户

发布于 2019-06-25 09:44:13

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

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

关於第二项问题:

根据我看到的一些类似的例子,我需要在OrderDetails类中初始化

属性,但我不确定该怎么做:

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

此外,由于您在OrderDetails和Book之间具有双向关系,因此可以考虑使用mappedBy annotation

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56743909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档