Hibernate + PostgreSQL (on MyEclipse + Spring): sequence
От: sir_shaman  
Дата: 19.03.06 11:53
Оценка:
только изучаю эту связку, поэтому могу наговорить ляпов — заранее прошу отнестись с пониманием.

по англоязычной сети ходит слушок, что как ни вертись, динамически создать таблицу (то есть если нету) в базе на основе дескриптора hibernate-мэппинга (smth.hbm.xml) для PostgreSQL не получится.

я разбираюсь с вот этим великолепным туториалом, но поскольку тут про все понемногу — я на предыдущей главе про JDBC, но уже с наличием hibernate-дескрипторов . чаще всего занимаюсь конечно копи/пэйстом, но обнаруживаю за собой, что все-таки осознаю, что делаю — так что в идеале все должно работать . и конечно там ни слова о Postgres.

проблема в том, что таблица при отустствии создается, но sequence пристроить никак не получается. простейщая фича типа

        <id name="bookID" type="java.lang.Long">
            <meta attribute="default-value">nextval('book_id_seq'::regclass)</meta>
            <column name="id" />
            <generator class="sequence" >
                <param name="sequence">book_id_seq</param>
            </generator>
        </id>


не прокатывает — сам sequence в базе создается, но при попытке insert (поле, поле, поле) пишет, что пытаюсь впихнуть null в непозволительное для этого поле айдишника.

имеет ли вообще смысл с этим париться — может забить и просто создавать таблицу ручками (что, конечно, не красиво, но для моего проекта прокатит)?

на всякий случай, applicationContext:

    <bean id="hibernateDataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName">
            <value>org.postgresql.Driver</value>
        </property>
        <property name="url">
            <value>jdbc:postgresql://localhost:5432/***</value>
        </property>
        <property name="username">
            <value>****</value>
        </property>
        <property name="password">
            <value>****</value>
        </property>
    </bean> 

    <bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.connection.pool_size">5</prop>
                <prop key="hibernate.connection.autocommit">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create-drop</prop>
                <prop key="hibernate.cglib.use_reflection_optimizer">false</prop>
              </props>
        </property>    
        <property name="dataSource">
            <ref local="hibernateDataSource" />
        </property>
          <property name="mappingResources">
            <list>
                  <value>***/springtest/hibernate/Book.hbm.xml</value>
                  .....             
            </list>
        </property>        
    </bean>
    
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource">
              <ref local="hibernateDataSource"/>
        </property>
    </bean>  
    
      <bean id="bookManager" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
             <ref local="transactionManager"/>
        </property>
        <property name="target">
             <bean class="***.springtest.bl.BookManager">
                 <property name="dataSource">
                      <ref local="hibernateDataSource"/>
                 </property>
             </bean>
        </property>
        <property name="transactionAttributes">
             <props>
                 <prop key="*">PROPAGATION_REQUIRED</prop>
             </props>
        </property>
    </bean>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.