实现: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
表中。这就是为什么!