gpt4 book ai didi

java - Hibernate返回 "weird"连接

转载 作者:行者123 更新时间:2023-11-29 12:24:14 35 4
gpt4 key购买 nike

我在一个带有 Hibernate 的项目中使用 JPA,并且需要在纯 JDBC 级别上执行一些操作,因此我使用此方法来获取与数据库的连接:

public class ConnectionUtil {
public static EntityManagerFactory EMF = Persistence
.createEntityManagerFactory("persistenceUnitName");

public static Connection getConnection() throws SQLException {

Connection connection = null;
EntityManager em = null;
try {
em = EMF.createEntityManager();
Session session = (Session)EMF.createEntityManager()
.getDelegate();
SessionFactoryImplementor sfi = (SessionFactoryImplementor) session
.getSessionFactory();
@SuppressWarnings("deprecation")
ConnectionProvider cp = sfi.getConnectionProvider();
connection = cp.getConnection();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (em != null) {
em.close();
}
}

return connection;
}
}

我使用这种方法将记录插入到我的数据库中:

public void saveOrUpdate(String sqlStatement, Connection connection,  Object... args) {
Connection connection = null;
PreparedStatement preparedStatement = null;

try {

preparedStatement = connection.prepareStatement(sqlStatement);
for (int i = 0; i < args.length; i++) {
preparedStatement.setObject(i + 1, args[i]);
}
preparedStatement.execute();

} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (preparedStatement != null) {
preparedStatement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}

}

实现如下:

saveOrUpdate("INSERT INTO my_table(my_column) VALUES (?)", ConnectionUtil.getConnection(), "MyValue");

没什么特别的。除了..它不起作用。没有异常(exception),什么都没有。但记录未插入。选择按预期进行。它返回记录。然后我交换了连接。我以经典方式创建了连接:

  Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/db","u","p");

传递了c而不是ConnectionUtil.getConnection()并且它起作用了。

但是,这种情况下的逻辑问题是:

如果我无法使用 getConnection 方法返回的连接插入记录,那么 Hibernate 使用相同的连接如何插入记录?

最佳答案

ConnectionProvider 不适合由应用程序使用,请检查 documentation

The ConnectionProvider interface is not intended to be exposed to the application. Instead it is used internally by Hibernate to obtain connections.

因此,更好的选择是第二种方法,以经典方式建立连接。

关于java - Hibernate返回 "weird"连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588169/

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