postgresql Hibernate миграции не все таблицы созданы - PullRequest
0 голосов
/ 23 марта 2020

У меня есть работающее приложение maven, использующее jpa / hibernate + mysql + spring с конфигурацией xml, без пружинной загрузки. Мне нужно вставить и удалить большой объем данных, и я прочитал postgresql, что позволяет генерировать тип.SEQUENCE, который может значительно ускорить пакетную вставку или выбор. Поэтому я решил перейти с mysql на postgresql. Однако у меня были проблемы с конфигурацией и чувствительностью к регистру:

Я строю таблицы с помощью своих аннотаций hibernate / jpa @Entity и @Table (name = xxx). Большинство таблиц создаются, но некоторые нет, и postgresql запускает ошибку:

org.postgresql.util.PSQLException: ERROR: relation "continuoustemperature" does not exist

, и когда я проверяю базу данных, таблица "непрерывная температура" действительно не создается. Большинство таблиц были созданы и заполнены, но некоторые нет. Я читал, что у некоторых людей были проблемы с чувствительностью к регистру с postgresql, но попытка строчить все, например, не помогло.

Класс ContinuousTempera:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@Entity
@Table(name="ContinuousTemperature")
public class ContinuousTemperature  implements Serializable, HasPhysicalDataAtContinuousTime<ContinuousTemperature,Double>, Comparable<ContinuousTemperature>, PrintableAtCal, DeepCopyable<ContinuousTemperature>
{


    private static final long serialVersionUID = 1L;



    @Id
    @GeneratedValue(strategy=GenerationType.SEQUENCE)
    @Column(name = "CTid")
    @XmlElement
    private Long CTid;



    @XmlElement
    @Column(columnDefinition = "DATETIME(3) NOT NULL")
    private Calendar measurementtime;   


    @XmlElement
    private String unit;
    @XmlElement
    @Column(nullable = false, columnDefinition = "TINYINT(1)")
    private boolean ismeasured; 

    @XmlElement(name="temperaturemeasured")
    private double temperaturemeasured; 


    @XmlElement
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name="temperaturesensorId")
    private TemperatureSensor temperaturesensor;


Моя база данных xml config :


<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>

<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>

    <context:property-placeholder location="classpath:config.properties"/>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${db.driverClassName}"/>
        <property name="url" value="${db.url}"/>

        <property name="username" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
    </bean> 

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="${db.type}" />
                <property name="showSql" value="false" />
            </bean>
        </property>
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan" value="com.nodenet.domain" />
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
                <prop key="hibernate.ejb.naming_strategy">${db.namingStrategy}</prop>


                <!-- 
                <prop key="hibernate.dialect">${db.dialect}</prop>


                <prop key="hibernate.show_sql">true</prop>

                <prop key="hibernate.default_schema">${db.schema}</prop>
                 -->
                <prop key="hibernate.hbm2ddl.auto">${db.hbm2ddl}</prop>
                <prop key="hibernate.jdbc.batch_size"> 50 </prop>
            </props>
        </property>
    </bean> 

    <bean id="jpa"  class="org.apache.camel.component.jpa.JpaComponent">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>

    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean> 

<tx:annotation-driven transaction-manager="transactionManager"/>

<jpa:repositories base-package="com.nodenet, com.nodenet.repository, com.nodenet.domain" />

config.properties:

db.driverClassName=org.postgresql.Driver
!db.url=jdbc:postgresql://localhost:3306/reallifepw3?rewriteBatchedStatements=true
db.url=jdbc:postgresql://localhost:5432/reallifepw3
db.username=postgres
!root
db.password=xxxxxxx

db.dialect=org.hibernate.dialect.PostgreSQL94Dialect
db.schema=

db.type=POSTGRESQL
db.namingStrategy=org.hibernate.cfg.ImprovedNamingStrategy
db.hbm2ddl=update
db.batch=50

Почему эта конкретная таблица не создается, а другие создаются?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...