当前位置: 首页 > 知识库问答 >
问题:

Spring:按id创建具有endpoint的对象

卜勇
2023-03-14

我目前正在用spring boot和mysql创建一个微服务来管理拍卖信息。我创建了一个bid-对象和一个offer-对象。除了bid和Offer的一些属性之外,这里最重要的是Offer和bid之间的OneTomany-关系,因为显然每个Offer都可以有多个相关的bid。

我使用默认的jparepository-接口进行数据库交互,并通过输入数据和测试是否能够得到正确的输出来测试数据库结构。这一切都运行良好,但当我试图测试输入数据的服务endpoint时,我得到了一些奇怪的行为。首先,这是我的结构,所以你们可以跟上我所说的。这些是我的bidoffer对象的(缩短)版本:

@Entity
@Data
public class Bid {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;

    @NotNull
    private String bidderUUID;

    @NotNull
    @JsonBackReference
    @ManyToOne(cascade = CascadeType.ALL)
    @JoinColumn(name = "offerId")
    private Offer offer;

    @NotNull
    private Integer amount;

    private Boolean hasWon;
}
@Entity
@Data
public class Offer {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    private String creatorUUID;

    @JsonManagedReference
    @OneToMany(mappedBy = "offer")
    List<Bid> bids;
}

这是我非常简单的代表和控制器:

public interface BidRepository extends JpaRepository<Bid, Long> {

}
@RestController
@RequestMapping("/bid")
public class BidController {
    @Autowired
    private BidRepository bidRepository;

    @GetMapping("/bids")
    public List<Bid> getAllBids() {
        return bidRepository.findAll();
    }

    @PostMapping("/add")
    public void createBid(@RequestBody Bid request) {
        bidRepository.saveAndFlush(request);
    }
}

使用数据库中的ID27和offer,我继续向服务发送一个bid。

{
    "amount": 2,
    "bidderUUID": "eine uuid",
    "offerId": 27
}

我收到了一个200 OK的响应,并且认为,似乎很好,但是数据库中的数据是错误的,因为它看起来是这样的:

我认为这个问题与以下事实有关:在发布新的bid时,我希望得到一个offer-对象,但只给他ID;但当我输入整个对象时,我得到一个org.hibernate.PersistentObjectException:detached entity pass to Persist

当传输一个新的投标对象时,我如何使spring接受报价的id?

共有1个答案

柴良哲
2023-03-14

我也遇到了这个问题,所以作为解决方案,我添加了映射列作为实体变量。在您的例子中,如果我说,您的bid实体缺少offer_id列映射,尽管它提到了关系。在BID表中添加以下条目,如下所示:

@Column(name = "offer_id")
private Long offerId;
// generate setter-getter
 类似资料:
  • 我有3分贝实体。产品-id,名称。/产品订单-id,日期。/Orders OrderDetail-OrderID,productId,Price。订单/{orderId}/orderDetails 谢了!

  • 问题内容: 我需要一个创建对象的类,为每个创建的对象分配一个ID。通常,此ID是该类的int属性。我希望每次创建一个对象时都增加该值(ID),然后将其分配给从1开始的那个对象。这让我感到震惊,我需要一个静态int属性。 如何初始化此静态属性? 我是否应该创建一个单独的方法来进行ID的增量(作为ID生成器),该增量在构造函数内部调用? 通常,最有效和精心设计的方法是什么? 问题答案: 就像您提到的I

  • 我有一个实体 我有这个错误

  • 我有0编码知识,但希望你们可以协助修改我在网上找到的代码,以创建多个按钮来执行不同的bat文件。我会将其保存为hta文件,以便在win shell环境中运行。谢谢!!!

  • 我目前用JavaFX制作了一个表单。我总是按一个按钮,我调用“addAnswer()”-方法。在其中,我创建了一个RadioButton、一个Label和一个deleteButton,我将它们捆绑在一个HBox中。我把所有的HBox都装在一个vBox中。现在的问题是删除按钮。我想深入研究点击按钮的HBox。 这是我的代码: 我在上面试过这个,但我意识到,所有的delAnswers-Button都有

  • 问题内容: 我是Java的新手,并且开始使用Java 。我想做的是为学生创建一个。每个学生都有与其相关的不同属性()。我试图弄清楚如何使用此属性添加新的学生对象。这是我所拥有的: 问题答案: 您需要的是以下内容: