我在尝试更新行时遇到问题。我正在使用postman在我的表中插入或更新一行。因此,我的代码是这样的:如果id已经存在于行中,则使用新值更新它,否则插入该行。
products.java
@Entity(
name = "Products"
)
@Table(
name = "products"
)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Products {
@Id
@SequenceGenerator(
name = "product_sequence",
sequenceName = "product_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "product_sequence"
)
@Column(
updatable = false
)
Integer id;
@Column(
nullable = false
)
String name;
float price;
int cid;
public Products(String name, float price, int cid) {
this.name = name;
this.price = price;
this.cid = cid;
}
public String toString() {
return "Products{ id = " + this.id + " name = " + this.name + " price = " + this.price + " cid = " + this.cid + " }";
}
}
productsrepository.java
public interface ProductsRepository extends JpaRepository<Products, Integer> {
@Query("select p.name from Products p where p.id = ?1")
List<String> findProductByCategory(Integer id);
@Modifying(clearAutomatically = true)
@Query("update Products p set p.id =:id, p.name =:name, p.price =:price, p.cid =:cid where p.id =:id")
void updateProducts(@Param("id") Integer id, @Param("name") String name, @Param("price") float price, @Param("cid") int cid);
}
productsservice.java
@Service
public class ProductsService {
private final ProductsRepository productsRepository;
@Autowired
public ProductsService(ProductsRepository productsRepository) {
this.productsRepository = productsRepository;
}
public void addNewProduct(Products product) {
if(productsRepository.existsById(product.getId())==true)
productsRepository.updateProducts(product.getId(), product.getName(), product.getPrice(), product.getCid());
else
productsRepository.save(product);
}
}
productscontroller.java
@RestController
@RequestMapping(path = "/store/")
class ProductsController {
private final ProductsService productsService;
@Autowired
public ProductsController(ProductsService productsService) {
this.productsService = productsService;
}
@PostMapping(path = "/add/products")
public void addNewProduct(@RequestBody Products product) {
productsService.addNewProduct(product);
}
}
但是,当尝试在“ Postman ”中发布时,出现以下错误: {"timestamp":"2021-07-03T16:35:11.459+00:00","status":500,"error":"Internal Server Error","path":"/store/add/products"}
此外,终端中的错误:
ERROR 7108 --- [nio-8090-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessApiUsageException: Executing an update/delete query; nested exception is javax.persistence.TransactionRequiredException: Executing an update/delete query] with root cause
javax.persistence.TransactionRequiredException: Executing an update/delete query
1条答案
按热度按时间pxq42qpu1#
在服务类的addnewproduct方法处添加@transactional
像这样使用