2017-07-18 84 views
0

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

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(); 
    } 
} 

SessionFactory的

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

我的水晶球坏了。你能否至少包含*一些你的代码来展示你所做的事情。 – dunni

+0

已添加代码,先生。 – fruh

+0

你还可以添加类SessionFactoryConfiguration和DataSourceConfiguration吗? – dunni

回答

0

的@EntityScan注解是缺乏为春季启动应用程序的主类。

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