我计划在我的新项目中使用Hibernate 5和Spring 4,并像往常一样将其分成不同的层/项目。
Gradle依赖项:
"org.springframework:spring-webmvc:4.2.1.RELEASE",
"org.springframework:spring-orm:4.2.1.RELEASE",
'org.hibernate:hibernate-core:5.0.2.Final',
'mysql:mysql-connector-java:5.1.36'
有一个API项目,其中包含一个User.class。在我看来,这个用户类不应该使用任何数据库层注解。它不应该指定@Table(name = "users")
或其他东西。它应该是一个简单的对象,具有getter和setter。
数据库层应该决定如何存储数据,这强烈依赖于数据库(例如MongoDB或MySQL)。
我遵循了一些Hibernate的教程,并最终得到了以下的@Configuration
类。
@Configuration
@ComponentScan("de.pentos.proto")
@EnableWebMvc
@EnableTransactionManagement
public class AppConfig {
private static final Logger log = LoggerFactory.getLogger(AppConfig.class);
private static Properties getHibernateProperties() {
final Properties properties = new Properties();
properties.put("hibernate.show_sql", "true");
// properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
properties.put("hbm2ddl.auto", "create");
return properties;
}
{
log.debug("Here am I: {}");
}
@Bean(name = "dataSource")
public DataSource getDataSource() {
final DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/myschema");
dataSource.setUsername("user");
dataSource.setPassword("password");
return dataSource;
}
@Inject
@Bean(name = "sessionFactory")
public SessionFactory getSessionFactory(final DataSource dataSource) {
final LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
sessionBuilder.addAnnotatedClasses(User.class);
sessionBuilder.addProperties(getHibernateProperties());
return sessionBuilder.buildSessionFactory();
}
@Inject
@Bean(name = "transactionManager")
public HibernateTransactionManager getTransactionManager(final SessionFactory sessionFactory) {
final HibernateTransactionManager transactionManager = new HibernateTransactionManager(
sessionFactory);
return transactionManager;
}
}
它运作得非常好,只是它使用了一个带注解的类。
我该如何将我的 hbm/user.xml
添加到 sessionBuilder 中?
我尝试使用一些例子中找到的 Configuration
类,但是发现 buildSessionFactory()
方法已经被弃用。
我还尝试了在这里描述的 ServiceRegistry
,但是失去了数据源方法,没有数据源系统无法设置 HibernateTransactionManager
。
没有 HibernateTransactionManager
我就不能使用 @Transactional
,而且我不喜欢手动打开和关闭事务。
目前我正处于困境中,真的需要帮助让它工作起来。我已经考虑放弃 Hibernate,使用我那个好老朋友 MyBatis,但你知道,我想学习点新东西…
hbm/user.xml
文件? - Arpit Aggarwal