2016-06-02 11 views
9

In un progetto di Primavera di avvio applicazione, ho 2 fonti di dati:primavera dati: rapporti tra 2 diverse fonti di dati

  • un database MySQL (alias "DB1")
  • un database MongoDB (alias "DB2 ")

sto usando primavera dati JPA e primavera dati MongoDB, e sta funzionando grande ... uno alla volta.

Dicendo db1 gestisce "Giocatori" e db2 gestisce "Squadre" (con un elenco di ID giocatori). È possibile rendere funzionante la relazione tra queste due entità eterogenee? (Vale a dire @ManyToOne, @Transactional, Lazy/Eager, etc.)

Per esempio, io voglio essere in grado di scrivere:

List<Player> fooPlayers = teamDao.findOneById(foo).getPlayers(); 

EDIT: Se possibile, mi piacerebbe trovare una soluzione che funziona con qualsiasi progetto di dati primaverili

+3

Come farlo è semplicemente spiegato nel [guida di riferimento] (http://docs.spring.io /spring-data/data-mongo/docs/1.9.2.RELEASE/reference/html/#mongo.cross.store) –

+0

L'annotazione @RelatedDocument è piacevole, ma funziona solo a senso unico. Inoltre, funziona solo con MongoDB (ho intenzione di modificare la mia domanda per dire che mi piacerebbe una soluzione che funzioni con qualsiasi progetto spring-data) – Nicolas

+0

Non esiste una soluzione che funzioni a prescindere dalla tecnologia. La tua domanda riguardava Spring Data JPA e Spring Data MongoDB. Questa soluzione è chiaramente documentata. Il supporto cross-store è fondamentalmente generico e potrebbe essere esteso a qualsiasi cosa, ma ciò richiede il lavoro da parte dell'utente. –

risposta

2

Sfortunatamente il vostro enigma non ha soluzione nei dati di primavera.

ciò che può essere una possibilità è che si crei una classe di interfaccia (DAO) personalizzata. Quella classe DAO avrebbe implementazioni per interrogare entrambi i tuoi DB. Un esempio molto grezzo e breve sarebbe

your DAO 
{ 
    yourFind (id) 
    { 
     this would find in db2 and return a relevant list of objects 
     findOneByID(id) 
     get the player from the above retrieved list and query db1 
     getPlayer(player) 
    } 
} 

Spero che questo si punta nella direzione giusta

Problemi correlati