mysql - JPA + MySQL : After Timeout --> use a local Connection

标签 mysql hibernate jpa timeout

由于我们的连接非常不稳定,我们决定在查询超时时切换到本地只读数据库。

但这是我的问题:当 javax.persistence 尝试查询时我没有得到异常:

// Attribute
        EntityManagerFactory entityManagerFactory;
        EntityManager manager;

        entityManagerFactory = Persistence
                .createEntityManagerFactory("org.hibernate.tutorial.jpa");

        manager = entityManagerFactory.createEntityManager();

        try {
            Query query = manager.createQuery(String.format(
                    "SELECT u FROM User u WHERE u.id = '%s'", 116));

            User user = (User) query.getSingleResult();
            manager.refresh(user);

            System.out.println(user.getUsername());

        } catch (org.hibernate.QueryTimeoutException ex) {
            throw new QueryTimeoutException("timeout");
        }
    }

这只是一个证明我的问题的测试。 我错过了什么?

Mysql: mysql-connector-java-5.1.16-bin.jar JPA:javax.persistence_2.0.3.v201010191057.jar hibernate :

115 [main] INFO org.hibernate.annotations.common.Version - Hibernate Commons Annotations 3.2.0.Final
124 [main] INFO org.hibernate.cfg.Environment - Hibernate 3.6.7.Final
126 [main] INFO org.hibernate.cfg.Environment - hibernate.properties not found
129 [main] INFO org.hibernate.cfg.Environment - Bytecode provider name : javassist
132 [main] INFO org.hibernate.cfg.Environment - using JDK 1.4 java.sql.Timestamp handling
208 [main] INFO org.hibernate.ejb.Version - Hibernate EntityManager 3.6.7.Final

persistence.xml:
    <properties>
    <property name="hibernate.hbm2ddl.auto" value="valide"/>
    <property name="hibernate.connection.url" value="jdbc:mysql:///database?zeroDateTimeBehavior=convertToNull"/>
    <property name="hibernate.connection.username" value="user"/>
    <property name="hibernate.connection.password" value="pass"/>
    <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
    <property name="javax.persistence.query.timeout" value="1"/>
    <property name="dialect" value="org.hibernate.dialect.MySQLDialect"/>
    </properties>

谢谢 托拜厄斯

最佳答案

解决方法:

Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://server/database", "user", "pass");

每次我想开始查询时,我都会测试连接是否存在:

if (connection.isValid(1)) {
return true;
} else {
throw new NoConnectionException();

关于mysql - JPA + MySQL : After Timeout --> use a local Connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7490236/

相关文章:

php - 如何将表与 SQL 结合起来?

java - 缺少 Artifact org.hibernate :hibernate-core

hibernate - 下拉列的 JPA 实体

java - 使用 Struts 2 输出时出现 JSON 异常错误

java - persistence.xml 不同的事务类型属性

java - JPA、MySQL、Hibernate 和 Maven 框架

mysql - 如何在 zend db 模型中使用 'distinct'

mysql - 在 Laravel 查询构建器中使用 OR

php - 在sql查询中创建计数器

postgresql - Hibernate 乐观锁定 Postgres 和 MariaDb 之间的不同行为