繁体   English   中英

休眠:表锁有选择吗?

[英]Hibernate: table lock with a select?

我有这种方法可以从表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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM