У меня есть работающее приложение 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
Почему эта конкретная таблица не создается, а другие создаются?