安卓中的JPA注解

14

我们有一个使用JPA/Hibernate的项目,服务器端的映射实体类在自己的Library-Project中,并使用注解将其映射到数据库。我想在Android项目中使用这些类 - 是否有任何方法可以忽略Android中的注解,以将这些类用作标准POJO?


请参见 https://stackoverflow.com/questions/13855161/using-jpa-generated-entity-classes-as-class-liberary-in-android,该问题于2012年提出。 - k3b
4个回答

8
只要你的类路径中有带有JPA注解的类的jar包,编译器就不会在意。如果没有运行时仪表系统(如Hibernate),注解只是额外提供的信息,但并不会被使用。唯一需要注意的问题是确保将JPA jar包包含在您的发布文件中。

3
可能会有问题。我并不希望将所有的Hibernate-JAR文件捆绑到Android项目中。 - dasmaze
如果您无法捆绑所需的类,则我能想到的唯一解决方案是使用自定义类加载器从字节码中剥离注释。这是一个非常重要的任务,但是可以完成。 - alphazero
PS:字节码转换不一定要在加载时发生。另一个选择是在服务器库上运行进程,并通过生成新的类文件来为Android进行清理。 - alphazero

5

实际的JPA注解是Java SE 6的一部分,而不是Hibernate。因此,您不需要拥有Hibernate JAR才能使用JPA注释类。您所需要的只是声明所引用注释的类/接口,如果可以的话,完整的JPA API jar大约为50k。


2
您可以使用Cmobilecom JPA来处理Android和Java相关的技术问题。它实现了JPA 2.1规范,因此您在Java中使用的所有JPA注释都可以在Android中无需任何更改地使用。只需在您的项目中添加以下依赖项即可。
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"
}

免责声明:我是Cmobilecom JPA的开发人员。


Cmobilecom JPA 2.0 实现了 JPA 规范 2.2 版本。 - eastwater

0

我刚遇到了这个问题,由于我使用Maven构建我的Android项目,所以我添加了这个依赖项

 <dependency>
     <groupId>org.hibernate.javax.persistence</groupId>
     <artifactId>hibernate-jpa-2.0-api</artifactId>
     <version>1.0.1.Final</version>
    </dependency>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接