2017-01-24 3 views
0

Ich versuche, Junit Testfälle für eine Java Spring Batch-Anwendung, DAO-Schicht zu schreiben. Wenn ich ein Data Layer-Objekt mit einem benutzerdefinierten Sequenzgenerator konfiguriere und den Testfall ausführe, erhalte ich die folgende Ausnahme.Geting Error: Plattform DatabasePlatform unterstützt NativeSequence nicht

Ausnahme Beschreibung: SEQ_EMPLOYEE_ID: Plattform DatabasePlatform unterstützt NativeSequence nicht.

Für die Datenpersistenz verwende ich JPA + EclipseLink.

Unten erwähnt die Konfigurationsdateien, die ich für Junit verwende.

DO Klasse

@Entity 
@Table(name = "EMPLOYEE") 
@NamedQuery(name = "test.test", 
     query = "SELECT d FROM EmployeeDO d where d.status = 'COMPLETED'") 
public class EmployeeDO implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @SequenceGenerator(name = "employeeIdSequence", allocationSize = 1, 
      sequenceName = "SEQ_EMPLOYEE_ID") 
    @Id 
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "employeeIdSequence") 
    @Column(name = "BATCH_ID") 
    private long batchId; 

} 

JunitPersistence.xml

persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> 
    <persistence-unit name="eclipseLinkPunitEmployee" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 

     <class>org.batch.model.data.EmployeeDO</class> 

     <exclude-unlisted-classes>true</exclude-unlisted-classes> 
      <properties> 
      <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/> 
      <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:dataSource"/> 
      <property name="javax.persistence.jdbc.user" value="sa"/> 
      <property name="javax.persistence.jdbc.password" value=""/> 
      <property name="eclipselink.ddl-generation" value="create-tables"/> 
      <property name="eclipselink.id-validation" value="NULL"/> 
     </properties> 
    </persistence-unit> 
</persistence> 

Test-Kontext XML

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

    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
    <property name="persistenceUnitName" value="eclipseLinkPunitEmployee" /> 
    <property name='dataSource' ref='junitDatasource' /> 
    <property name="persistenceXmlLocation" value="classpath:JunitPersistence.xml" /> 
    <property name="jpaPropertyMap"> 
     <map> 
      <entry key="eclipselink.weaving" value="false" /> 
     </map> 
    </property> 
    </bean> 
    <jdbc:embedded-database id="junitDatasource" type="HSQL"> 
    <jdbc:script location="classpath:sequences.sql"/> 
    </jdbc:embedded-database> 

sequences.sql

CREATE SEQUENCE SEQ_EMPLOYEE_ID START WITH 1 increment by 1; 
CREATE TABLE DUAL (DUMMY DECIMAL); 
INSERT INTO DUAL VALUES(1); 
SET DATABASE SQL SYNTAX ORA TRUE; 

Antwort

1

nativen Sequenz Objekte sind spezifisch für die Datenbank verwendet wird - die korrekte Datenbankplattform angeben müssen, die für native Sequenzen verwendet werden sollte, zu arbeiten. Sie müssen die Persistenzeigenschaft target-database hinzufügen, um die Datenbank anzugeben, wenn sie nicht von Spring abgerufen oder gesetzt wird.

+0

Hinzugefügt in Persistenz XML. Es funktioniert !! Vielen Dank.. – user1940878

Verwandte Themen