gpt4 book ai didi

java - Hibernate:带有选择的表锁?

转载 作者:行者123 更新时间:2023-11-30 08:09:24 24 4
gpt4 key购买 nike

我有一个从表product_customer中选择一行的方法:

public static String getQuoziente(String pcCustomer, String pcAccountNumber, String prodCode) {
String quoziente=null;
Session session = HibernateUtil.getSessionFactory().openSession();

try {
String sql = String.format("SELECT pc_quoziente FROM product_customer " +
"WHERE pc_customer=:cliente and pc_account_number=:numacc and pc_prod_desc=:prod");
quoziente = (String) session.createSQLQuery(sql)
.setParameter("cliente", pcCustomer)
.setParameter("numacc", pcAccountNumber)
.setParameter("prod", prodCode)
.uniqueResult();
} finally {
session.close();
}
return quoziente;
}

在此查询之后,尝试使用以下命令从 MySqlWorkbench 截断表:

TRUNCATE wla.product_customer; 

但是截断被锁阻塞并且永远不会结束。为什么一个简单的选择行应该锁定表?

PS:我可以使用 DELETE 删除行,只有截断被锁定

最佳答案

在运行 TRUNCATE 语句之前,您需要在代码中提交事务。MySQL维护元数据锁,如果DML语句有锁,则需要在执行DDL语句之前通过提交释放它(在本例中为TRUNCATE)。SELECT 和 DELETE 是 DML 语句,TRUNCATE 是 DDL 语句。因此,除非释放锁,否则您将能够执行 DELETE 但不能执行 TRUNCATE。

关于java - Hibernate:带有选择的表锁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30622244/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com