Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 春季及;在没有jpa的情况下休眠_Java_Xml_Spring_Hibernate_Hibernate 5.x - Fatal编程技术网

Java 春季及;在没有jpa的情况下休眠

Java 春季及;在没有jpa的情况下休眠,java,xml,spring,hibernate,hibernate-5.x,Java,Xml,Spring,Hibernate,Hibernate 5.x,对于我的新项目,我计划使用Hibernate5和Spring4,并一如既往地将它们分成不同的层/项目 渐变依赖项: "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项目,它包含

对于我的新项目,我计划使用Hibernate5和Spring4,并一如既往地将它们分成不同的层/项目

渐变依赖项:

"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方法,但是你知道,我喜欢学习一些新东西…

xml
文件作为资源添加到
SessionFactory
,如下所示:

@Inject
    @Bean(name = "sessionFactory")
    public SessionFactory getSessionFactory(final DataSource dataSource) {
        final LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
        sessionBuilder.addResource("/path-to-/hbm/user.xml");
        sessionBuilder.addAnnotatedClasses(User.class);
        sessionBuilder.addProperties(getHibernateProperties());
        return sessionBuilder.buildSessionFactory();
    }

为什么要加载
hbm/user.xml
?因为它包含用户对象的数据映射的xml描述,因为用户对象不能包含JPA注释。