【问题标题】:How to save multiple data to database in spring boot如何在spring boot中将多个数据保存到数据库
【发布时间】:2026-02-17 14:45:02
【问题描述】:

我尝试使用 for 循环将多个数据保存到数据库,但数据库只显示最后一个值。我不知道哪一部分是错误的。

这是我的模特

@Entity
@Table(name="receipt_details")
public class ReceiptDetails {

@Id
@Column(name="id")
private int id;

@Column(name="ordered_food")
private String ordered_food;

@Column(name="quantity")
private int quantity;

@Column(name="price")
private double price;

存储库

import org.springframework.data.jpa.repository.JpaRepository;

import com.example.fyp6.model.ReceiptDetails;

public interface ReceiptDetailsRepository extends JpaRepository<ReceiptDetails, Integer> {

}

服务

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.fyp6.model.ReceiptDetails;
import com.example.fyp6.repo.ReceiptDetailsRepository;

@Service
public class ReceiptDetailsServiceImpl implements ReceiptDetailsService {

@Autowired
private ReceiptDetailsRepository receiptDetailsRepo;

@Override
public ReceiptDetails save(ReceiptDetails receiptDetails) {
    return receiptDetailsRepo.save(receiptDetails);
}

}

控制器

//Save invoice details
List<Item> cart = (List<Item>) session.getAttribute("cart");    
for(Item item : cart) {
ReceiptDetails receiptDetails = new ReceiptDetails(); 
receiptDetails.setId(receipt.getReceipt_id());
receiptDetails.setPrice(item.getFood().getFood_price());
receiptDetails.setQuantity(item.getQuantity());
receiptDetails.setOrdered_food(item.getFood().getFood_name());
receiptDetailsService.save(receiptDetails);
}

我不知道哪一部分是错误的。

【问题讨论】:

    标签: java mysql spring jpa


    【解决方案1】:
    receiptDetails.setId(receipt.getReceipt_id());
    

    这就是问题所在。您保存具有相同 ID 的所有实体。因此数据库中只显示了 1 个

    【讨论】:

    • 我删除了receiptDetails.setId(receipt.getReceipt_id()) 并添加了@GeneratedValue(strategy = GenerationType.IDENTITY) 和@ManyToOne @JoinColumn(name="receipt_id") 私人收据收据。它工作!非常感谢
    • @JYong 如果对您有帮助,请考虑接受答案
    【解决方案2】:

    同意布格的回答。尝试使用自动生成的值来填充您的主键。或者使用复合键使您的记录独一无二。

    PS:你可以使用 saveAll() 代替 save()。

    【讨论】: