如何阻止HQL hibernate插入多个数据插入?



实现:HQL hibernate。我试图保存1个数据,但发生了什么是它保存many data,我唯一停止它是由result > 1 to NullPointerException。我已经把一些session.close()仍然保存多个

Hibernate有save,但不打算使用它。

@Override
public Product save(Product product) {
Transaction transaction = null;

Session session = HibernateUtil.getSessionFactory().openSession();
transaction = session.beginTransaction();
String hql = "INSERT INTO Product  ( productname, productbrand, productprice, productdescription, productquantity, productexpirationdate) " +
"SELECT   productname, productbrand, productprice, productdescription, productquantity, productexpirationdate FROM Product ";
Query query = session.createQuery(hql);
Integer result =  query.executeUpdate();

transaction.commit();
session.close();
if (result == 0 ||result == null  ) {

throw new NullPointerException();
}

// if (result > 1 || result >= 0 ||result == null  ) {
//      
///  throw new NullPointerException();
//}

return product;
}

示例在数据库中插入1个数据然后突然插入多个数据。如何阻止这种情况?

'1', 'Hello1234', 'Hello', '2022-10-27 00:00:00', 'Hello1234', '1.4', '10', NULL
'2', 'Hello1234', 'Hello', '2022-10-27 00:00:00', 'Hello1234', '1.4', '10', NULL
'3', 'Hello1234', 'Hello', '2022-10-27 00:00:00', 'Hello1234', '1.4', '10', NULL
'4', 'Hello1234', 'Hello', '2022-10-27 00:00:00', 'Hello1234', '1.4', '10', NULL

数据库查询

CREATE TABLE `tb_product` (
`purchase_item` int NOT NULL AUTO_INCREMENT,
`productbrand` varchar(255) NOT NULL,
`productdescription` varchar(255) NOT NULL,
`productexpirationdate` datetime NOT NULL,
`productname` varchar(255) NOT NULL,
`productprice` double NOT NULL,
`productquantity` int NOT NULL,
PRIMARY KEY (`purchase_item`),
UNIQUE KEY `purchase_item_UNIQUE` (`purchase_item`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

fixgetSessionFactory().openSession()togetSessionFactory().getCurrentSession()

参考链接https://stackoverflow.com/questions/8046662/hibernate-opensession-vs-getcurrentsession#:~:text=openSession()%20always%20opens%20a,t%20need%20to%20close%20this.

什么是奇怪的查询?

INSERT INTO Product ( productname, productbrand, productprice, productdescription, productquantity, productexpirationdate) 
SELECT  productname, productbrand, productprice, productdescription, productquantity, productexpirationdate 
FROM Product";

选择Product中的数据并同时插入到同一个Product表中。这就是为什么!

最新更新