Создание пользовательской схемы Hibernate - PullRequest
2 голосов
/ 29 мая 2011

<prop key="hibernate.hbm2ddl.auto">create</prop> создает новую схему базы данных и <prop key="hibernate.hbm2ddl.auto">update</prop> создает, если она не существует, и обновляет существующую схему базы данных.Если я хочу проверить, существует ли схема базы данных или нет, и в зависимости от того, будет ли создана схема базы данных, как я могу этого добиться.В настоящее время конфигурация моего applicationContext.xml:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="annotatedClasses">
        <list>
            <value>info.ems.models.User</value>
            <value>info.ems.models.Role</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.HSQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>        
</bean>
<bean id="dao" class="info.ems.hibernate.HibernateEMSDao" init-method="createSchema">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>  

И HibernateEMSDao.java:

public class HibernateEMSDao implements EMSDao {

    private final Logger logger = LoggerFactory.getLogger(getClass());

    private HibernateTemplate hibernateTemplate;

    public void setSessionFactory(SessionFactory sessionFactory) {
        this.hibernateTemplate = new HibernateTemplate(sessionFactory);
    }    

    public void saveUser(User user) {
        hibernateTemplate.saveOrUpdate(user);
    }

    public List<User> listUser() {
        return hibernateTemplate.find("from User");
    }

    public void createSchema() {
        logger.info("inserting default admin user into database");
        User admin = new User();
        admin.setUsername("admin");
        admin.setName("Admin");
        admin.setEmail("admin");
        admin.setPassword("21232f297a57a5a743894a0e4a801fc3");
        saveUser(admin);
        logger.info("Admin inserted into database");

        try {
            System.out.println(listUser().get(0).getId());
        } catch (Exception e) {
            logger.error("===================Error================");
        }
    }               
}

Работает.Какая конфигурация поможет мне получить это?Что-то вроде:

  • Проверка пользователя с идентификатором = 1 существует
  • Если не создать схему

Спасибо и привет.

1 Ответ

1 голос
/ 29 мая 2011

Вы можете отключить опцию hibernate.hbm2ddl.auto, проверить условия (возможно, используя обычный JDBC) и вызвать (или не вызывать) метод create класса SchemaExport .Это будет сделано в коде инициализации вашего приложения (ServletContextListener в случае, если вы работаете с веб-приложением).

Пример использования класса SchemaExport:

AnnotationConfiguration config = new AnnotationConfiguration();
config.addAnnotatedClass(info.ems.models.User.class);
config.addAnnotatedClass(info.ems.models.Role.class);
config.configure();
new SchemaExport(config).create(true, true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...