2014-03-31 2 views
0

Mongodb 용 JPA 구성에 어려움이 있습니다.MongoDB가있는 Eclipselink - 캐스트 예외

@Entity 
@NoSql(dataFormat = DataFormatType.MAPPED) 
public class Instrument { 

    @Id 
    String securityID = null; 

    @OneToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE, CascadeType.DETACH }) 
    Set<Snapshot> snapshots = new HashSet<Snapshot>(); 

    // constructor, getters and setters 
    ... 
} 

: 나는 두 엔티티 클래스를

<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_2_0.xsd" 
    version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> 
    <persistence-unit name="mongo" transaction-type="RESOURCE_LOCAL"> 
     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
     <class>com.smarttrade.tick.jpa.Instrument</class> 
     <class>com.smarttrade.tick.jpa.Snapshot</class> 
     <exclude-unlisted-classes>false</exclude-unlisted-classes> 
     <properties> 
     <property name="eclipselink.target-database" 
      value="org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform" /> 
     <property name="eclipselink.nosql.connection-spec" 
      value="org.eclipse.persistence.nosql.adapters.mongo.MongoConnectionSpec" /> 
     <property name="eclipselink.nosql.property.mongo.port" value="27017" /> 
     <property name="eclipselink.nosql.property.mongo.host" value="localhost" /> 
     <property name="eclipselink.nosql.property.mongo.db" value="mydb" /> 
     <property name="eclipselink.logging.level" value="FINEST" /> 
     </properties> 
    </persistence-unit> 
</persistence> 

:

[EL Config]: connection: 2014-03-31 10:48:24.171--ServerSession(1883377923)--Connection(1001688235)--Thread(Thread[main,5,smarttrade])--disconnect 
[EL Severe]: ejb: 2014-03-31 10:48:24.181--ServerSession(1883377923)--Thread(Thread[main,5,smarttrade])--java.lang.ClassCastException: org.eclipse.persistence.nosql.adapters.mongo.MongoPlatform cannot be cast to org.eclipse.persistence.internal.databaseaccess.DatabasePlatform 
    at org.eclipse.persistence.sequencing.TableSequence.onConnect(TableSequence.java:168) 
    at org.eclipse.persistence.sequencing.Sequence.onConnect(Sequence.java:270) 
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectSequences(SequencingManager.java:927) 
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnectInternal(SequencingManager.java:747) 
    at org.eclipse.persistence.internal.sequencing.SequencingManager.onConnect(SequencingManager.java:700) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeSequencing(DatabaseSessionImpl.java:282) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:636) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:632) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.initializeDescriptors(DatabaseSessionImpl.java:568) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.postConnectDatasource(DatabaseSessionImpl.java:799) 
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.login(DatabaseSessionImpl.java:756) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.login(EntityManagerFactoryProvider.java:241) 
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:685) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:204) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:304) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:336) 
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:302) 
    at com.smarttrade.tick.engine.TickEngine.start(TickEngine.java:287) 

내의 persistence.xml는 다음과 같이 정의된다 : 여기

내 스택 예외
@Entity 
@Inheritance(strategy = InheritanceType.JOINED) 
@NoSql(dataFormat = DataFormatType.MAPPED) 
public class Snapshot { 

    @Id 
    @GeneratedValue(strategy = GenerationType.TABLE) 
    double id; 

    @Temporal(TemporalType.TIMESTAMP) 
    Date snapshotTs; 

    String bestOfferOwn; 
    .. // other fields 

    // constructor, getters and setters 
    ... 
} 

그리고 여기가 내가 전화하는 방법은 다음과 같습니다

EntityManagerFactory factory = Persistence.createEntityManagerFactory("mongo"); 
EntityManager em = factory.createEntityManager(); 
em.getTransaction().begin(); 
Instrument i = new Instrument("JAP_USDEUR"); 
Snapshot s = new Snapshot(new Date(), "LP_one", 20000, 3.1, new Date(), "LP_two", 10000, 3.0, new Date()); 
Snapshot s2 = new Snapshot(new Date(), "LP_rg", 500, 4.9, new Date(), "LP_zet", 6000, 5.1, new Date()); 
i.getSnapshots().add(s); 
i.getSnapshots().add(s2); 
em.persist(i); 

em.getTransaction().commit(); 
em.close(); 

공장이 생성 한 다음 그 EntityManager의 연결을 만들 것 같다,하지만 난이 캐스트 예외가 후. 그것 (Eclipselink with MongoDB java.lang.ClassCastException)에 대한 게시물을 발견했지만 이미 내 persistence.xml에 클래스를 추가했습니다.

저는 정말 jpa의 초보자입니다. 나는 틀린 것을 설정했을지 모르지만, 나는 무엇을 발견 할 수 없습니다.

답변

0

마침내 내 문제가 무엇인지 알아 냈습니다. 내 Snaphot의 Id 생성 전략에 GenerationType.TABLE을 사용했지만이 방법은 nosql에서 지원되지 않습니다.

@Id 
@GeneratedValue(strategy = GenerationType.TABLE) 
double id; 

@Id 
@GeneratedValue 
double id; 

에 있으며

을했다 : 은 그냥 변경