当前位置: 首页 > 知识库问答 >
问题:

Hibernate:已建立JDBC连接,但未执行任何语句

梁韬
2023-03-14

我用spring boot和hibernate做了一个DAO库。对DAO方法的所有单元测试都运行良好。但是当我在另一个spring boot项目中使用这个jar时,与数据源的JDBC连接已经建立,但是语句既没有准备也没有执行。DAO bean被正确注入,会话和事务打开。我没有其他错误或例外。

HiberNate统计记录如下:

2017-07-18 14:57:31.440  INFO 13736 --- [           main] i.StatisticalLoggingSessionEventListener : Session Metrics {
75050 nanoseconds spent acquiring 1 JDBC connections;
0 nanoseconds spent releasing 0 JDBC connections;
0 nanoseconds spent preparing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC statements;
0 nanoseconds spent executing 0 JDBC batches;
0 nanoseconds spent performing 0 L2C puts;
0 nanoseconds spent performing 0 L2C hits;
0 nanoseconds spent performing 0 L2C misses;
0 nanoseconds spent executing 0 flushes (flushing a total of 0 entities and 0 collections);
52279 nanoseconds spent executing 1 partial-flushes (flushing a total of 0 entities and 0 collections)

有什么想法吗?

编辑:我的一些代码

DAO 实现:

@Repository
public class CompagnieDaoImpl implements CompagnieDao {

    private final Logger logger = LoggerFactory.getLogger(CompagnieDaoImpl.class);

    @Autowired
    private SessionFactory sessionFactory;

    @SuppressWarnings("unchecked")
    @Override
    public List<Compagnie> get() {
        Session session = null;
        Transaction transaction = null;
        List<Compagnie> compagnies = null;
        try {
            session = sessionFactory.openSession();
            transaction = session.beginTransaction();
            compagnies = session.createCriteria(Compagnie.class).list();
            transaction.commit();
        } catch (Throwable ex){
            logger.error("CompagnieDaoImpl.get exception : " + ex.getMessage());
            if (session != null) {
                transaction.rollback();
            }
        } finally {
            if (session != null) {
                session.close(); 
            }
        }       
        return compagnies;
    }

DAO接口:

public interface CompagnieDao {
    public List<Compagnie> get();
}

自定义属性:

{"properties": [
  {
    "name": "clipperton.datasource.password",
    "type": "java.lang.String",
    "description": "A description for 'clipperton.datasource.password'"
  },
  {
    "name": "clipperton.datasource.url",
    "type": "java.lang.String",
    "description": "A description for 'clipperton.datasource.url'"
  },
  {
    "name": "clipperton.datasource.driver-class-name",
    "type": "java.lang.String",
    "description": "A description for 'clipperton.datasource.driver-class-name'"
  },
  {
    "name": "clipperton.datasource.username",
    "type": "java.lang.String",
    "description": "A description for 'clipperton.datasource.username'"
  }
]}

现在,在使用此库的项目中:

应用程序属性:

#Datasource
spring.jpa.hibernate.ddl-auto=update
clipperton.datasource.url=jdbc:mysql://localhost:3306/clipperton
clipperton.datasource.username=*****
clipperton.datasource.password=*****
spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
clipperton.datasource.driver-class-name=com.mysql.jdbc.Driver

#Hibernate
logging.level.org.hibernate.SQL=DEBUG
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
logging.level.org.hibernate.type=TRACE
spring.jpa.properties.hibernate.generate_statistics=true

#debug
debug=true

主要类

@SpringBootApplication(scanBasePackages = {"fr.example.spring.clipperton.clippertondao"})
@Import({DataSourceConfiguration.class, SessionFactoryConfiguration.class})
public class ClippertonStandaloneApplication {

    public static void main(String[] args) {
        SpringApplication.run(ClippertonStandaloneApplication.class, args);
    }
}

最后,测试类:

@RunWith(SpringRunner.class)
@SpringBootTest(classes=ClippertonStandaloneApplication.class)
public class ClippertonStandaloneApplicationTests {

    @Autowired
    CompagnieDao compagnieDao;

    @Test
    public void contextLoads() {
         assertNotNull(compagnieDao);
    }

    @Test
    public void readCompanies() {
        List<Compagnie> compagnies = compagnieDao.get();
        assertEquals(1, compagnies.size());
    }

数据源

@Configuration
@EnableAutoConfiguration
public class DataSourceConfiguration {
    @Bean
    @ConfigurationProperties(prefix="clipperton.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create().build();
    }
}

会议工厂

   @Configuration
    @EnableAutoConfiguration
    public class SessionFactoryConfiguration {
        @Bean
        public HibernateJpaSessionFactoryBean sessionFactory(EntityManagerFactory emf) {
            HibernateJpaSessionFactoryBean fact = new HibernateJpaSessionFactoryBean();
            fact.setEntityManagerFactory(emf);
            return fact;
        }
    }

共有1个答案

糜淇
2023-03-14

Spring Boot应用程序主类缺少@EntityScan注释。

@SpringBootApplication(scanBasePackages = {"fr.example.spring.clipperton.clippertondao"})
@EntityScan(basePackages = "fr.example.spring.clipperton.clippertondao.domain")
@Import({DataSourceConfiguration.class, SessionFactoryConfiguration.class})
public class ClippertonStandaloneApplication { ... }
 类似资料:
  • 问题内容: 在受到谴责之前,请阻止已建立的异常连接。谁可以给我解决方案 问题答案: 那是因为必须在建立连接之前调用该函数。检查此链接 http://developer.android.com/reference/java/net/HttpURLConnection.html#setRequestMethod(java.lang.String) 因此最好在openConnection()之前调用它。

  • 问题内容: 有人可以提供有关如何建立JDBC连接池的示例或链接吗? 从搜索谷歌,我看到这样做的许多不同方式,这相当令人困惑。 最终,我需要代码来返回一个对象,但是我在入门时遇到了麻烦。欢迎任何建议。 更新: 没有或没有池连接实现?为什么不最好使用这些? 问题答案: 如果你需要一个独立的连接池,那么我首选的是C3P0而不是DBCP(我在上一个答案中已经提到),在重负载下我对DBCP的问题太多了。使用

  • 我正在编写一个简单的TCP客户端和服务器Perl脚本。到现在为止,我使用wireshark验证了三路TCP握手,并且建立了连接。但当我尝试发送或恢复数据时,什么也不会发生。 1)客户端和服务器之间的主要区别只是服务器增加了一个LISTEN参数,使它能够侦听传入的连接? 2)在recv和显示数据之间是否缺少任何步骤? 3)当程序第一次执行while循环时,难道不应该至少发送硬编码字符串“$respo

  • 问题内容: 我们正在经历升级数据库软件的过程,还将从Tomcat 5.5升级到Tomcat7。结果,我使用的是新的JDBC驱动程序,在本例中为推荐的SQL Anywhere JDBC 4.0驱动程序,它需要ODBC服务。 我将其全部用于Eclipse方面取得了巨大的成功。但是奇怪的是,当我尝试在Eclipse之外运行Tomcat时,出现以下错误: 我 可以 得到一个纯Java驱动程序(jConne

  • 使用跺脚时。js和sockjs,我可以很好地连接到Spring Boot后端。 在Angular5中使用stompjs和sockjs时,我不断遇到以下错误: InvalidStateError:连接尚未建立 有解决办法吗?只是添加了sockjs。正如本文中提到的,min.js并没有起到任何作用。 详细日志如下: 设置连接/1主管道。3388a5e3a20e64e3bdb8。捆js:1设置连接/2主

  • 你好,我一直在使用Spring Kafka活页夹作为消费者。通过查看日志,我能够连接到主题,尽管我不确定它为什么不处理来自制作人的任何消息。 你知道可能遗漏了什么吗?非常感谢。 聚甲醛 应用程序YML 消费者阶层 侦听器类 日志 从日志中可以看到,它能够连接到主题。虽然我不确定为什么我没有收到来自生产者的任何消息。是因为分区被撤销吗?这与为什么我没有收到任何消息有关吗?生产者来自第三方,他需要做些