Annotazioni JPA in Android
-
06-07-2019 - |
Domanda
Abbiamo un progetto che utilizza JPA / Hibernate sul lato server, le classi di entità mappate sono nel loro progetto-libreria e usano le annotazioni per essere mappate sul database. Voglio usare queste classi in un progetto Android - c'è un modo per ignorare le annotazioni all'interno di Android, per usare queste classi come POJO standard?
Soluzione
Al compilatore non importa se hai il jar con le classi di annotazione JPA nel tuo percorso di classe. E se non è presente un sistema di strumentazione di runtime (come Hibernate), le annotazioni sono solo informazioni extra che sono lì ma non utilizzate. L'unico problema è assicurare l'inclusione del vaso JPA nella tua distribuzione.
Altri suggerimenti
Le effettive annotazioni JPA fanno parte di Java SE 6, non vanno in letargo. Quindi non è necessario disporre del JAR Hibernate per poter utilizzare le classi annotate JPA. Tutto ciò di cui hai bisogno sono le classi / interfacce che dichiarano le annotazioni a cui fai riferimento, se te lo puoi permettere, il vaso API completo JPA è di circa 50k.
Mi sono appena imbattuto in questo problema e dal momento che uso Maven per costruire il mio progetto Android ho aggiunto questa dipendenza
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.0-api</artifactId>
<version>1.0.1.Final</version>
</dependency>
Puoi utilizzare Cmobilecom JPA per Android e Java. Implementa le specifiche JPA 2.1. Quindi tutte le tue annotazioni JPA per Java funzioneranno per Android senza alcuna modifica. Aggiungi semplicemente le seguenti dipendenze nei tuoi progetti.
Android:
dependencies {
implementation("com.cmobilecom:cmobilecom-jpa-android:${version}@aar") {
transitive = true
}
annotationProcessor "com.cmobilecom:cmobilecom-jpa-processor:$version"
}
JDBC:
dependencies {
implementation "com.cmobilecom:cmobilecom-jpa-jdbc:$version"
// annotation processor: generate static metamodel
compileOnly "com.cmobilecom:cmobilecom-jpa-processor:$version"
}
Dichiarazione di non responsabilità: sono uno sviluppatore dell'APP Cmobilecom.