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;
}
}
我的水晶球壞了。你能否至少包含*一些你的代碼來展示你所做的事情。 – dunni
已添加代碼,先生。 – fruh
你還可以添加類SessionFactoryConfiguration和DataSourceConfiguration嗎? – dunni