解决使用导出不同库的实体重名不符合JPA规范问题

一.导出库对应实体

使用JPA,需要导出数据库对应实体,这样才可以在JPA中使用。

JPA是Hibernate的目前标准,可以用于不同数据库,并可以让工程师脱离数据的实际结构,更专心于业务。

二.导出过程:用Eclipse

可以用IDEA导出JPA实体,但用IDEA导出实体会有shema和数据库标识符,故选择Eclipse作为导出工具。

导出实体方法如下:

  1. 创建JAVA项目,同时确保Eclipse里装上了JPA工具;
  2. 右键JAVA项目,选择Propeties。

解决使用导出不同库的实体重名不符合JPA规范问题

      选择JPA工具。(第一次使用时,会进行属性配置,点击即可)。

解决使用导出不同库的实体重名不符合JPA规范问题

  1. 创建数据库连接:

解决使用导出不同库的实体重名不符合JPA规范问题

如果数据库没有连接,则需要建立连接。

解决使用导出不同库的实体重名不符合JPA规范问题

建立数据库连接方法可以逐步实现,必要时可以从网上查到相关资料。

  1. 导出实体。

解决使用导出不同库的实体重名不符合JPA规范问题

导出实体过程中,设置主键为auto。

解决使用导出不同库的实体重名不符合JPA规范问题

解决使用导出不同库的实体重名不符合JPA规范问题

三.不同数据库表同名问题

在不同数据库中,如果表名相同,则导出实体名称相同,这会造成JPA冲突。目前的方法是改名。

笔者写了一个改名程序:

import os

PATH = 'JAVA类路径'


files = os.listdir(PATH)

print(files)

name_arr = []

for f in files:
    name = f[:-5]
    print(name)
    name_arr.append(name)

for f in files:
    with open(PATH + '\\' + f, 'r') as fp:
        str = fp.read()

        for name in name_arr:            
            str = str.replace(name + ' ', name + 'Extra' + ' ')
            str = str.replace(name + '.', name + 'Extra' + '.')
            str = str.replace(name + '(', name + 'Extra' + '(')
            str = str.replace(name + ')', name + 'Extra' + ')')

        with open(PATH + '\\' + f, 'w') as fw:
            fw.write(str)

for f in files:
    f_newname = f.replace('.java', 'Extra.java')
    print(f_newname)

    try:
        os.rename(PATH + '\\' + f, PATH + '\\' + f_newname)
    except:
        continue

四.使用数据库实体作为JAR包

导出JAR包在IDEA中执行,因为本次主要开发过程均会在IDEA中。导出JAR包的前提是:要保证总账套和子账套的JAVA程序本身没有问题,即可以正确构建程序。

构建完程序以后,进行导出包。

导出JAR包方法如下:

  1. 在Project Structure里选择Artifacts,然后,可以点击+号添加,然后选择生成想要的数据包的名字,然后,选择Module Output。

解决使用导出不同库的实体重名不符合JPA规范问题

  1. 选择需要的模块。
  2. 解决使用导出不同库的实体重名不符合JPA规范问题

 

  1. Build Aritifacts生成JAR包。

解决使用导出不同库的实体重名不符合JPA规范问题

 

五.在IDEA中使用JAR包

IDEA使用JAR包方法如下:

  1. 在Project Structure里选择Module(或项目),加入JAR包。

解决使用导出不同库的实体重名不符合JPA规范问题

六.在IDEA中使用新JPA规范

在IDEA中,必须使用新的JPA语法(Hibernate)语法,语法样例如下:

Map<String, String> properties = “已经配置好的properties”;
EntityManagerFactory emf = Persistence.createEntityManagerFactory("jpaper", properties);
EntityManager em = emf.createEntityManager();

final CriteriaBuilder criteriaBuilder = em.getCriteriaBuilder();
CriteriaQuery<A> crit = criteriaBuilder.createQuery(A.class);
Root< A > root = crit.from(A.class);

crit.where();

List lst =  em.createQuery(crit).getResultList()

上一篇:JPA开发利器fastjpa使用介绍


下一篇:spring data jpa 动态查询