JPA插入语句的正确语法是什么?这可能听起来像一个简单的问题,但我一直无法找到答案。
我知道如何从Java代码中执行此操作,但我正在寻找一种在创建数据库时将对象插入数据库的方法。
有什么想法吗?
答案 0 :(得分:28)
JPA中没有INSERT语句。您必须使用EntityManager插入新实体。 JPA中允许的唯一语句是SELECT,UPDATE和DELETE。
答案 1 :(得分:17)
这是使用EntityManager持久化JPA对象的good reference。例如,这是使用persist方法插入对象的方法:
EntityManager em = getEntityManager();
em.getTransaction().begin();
Employee employee = new Employee();
employee.setFirstName("Bob");
Address address = new Address();
address.setCity("Ottawa");
employee.setAddress(address);
em.persist(employee);
em.getTransaction().commit();
答案 2 :(得分:5)
如果要在java之外的数据库中插入数据,则需要使用本机SQL。使用SQL Standard确保大多数数据库都可以执行脚本。当应用程序运行时,JPA将对新数据进行映射,并在需要时将其转换为对象。
如何确保脚本适用于所有数据库?这就是DBA在制作商店程序或本机查询时遇到的同样问题......这就是为什么JPA存在,以避免直接在SQL中使用,但我知道有时需要这样做。
我建议您制作3个主要脚本。一个用于Oracle,一个用于SQL Server(从2005到2008版本的日期数据类型中存在一些问题,所以要小心),一个用于MySQL。使用标准SQL启动脚本,当您在此数据库中对其进行测试时,您会发现需要为每个DBMS执行一些修复。
如果你得到它,你可以创建一个文件脚本(* .sql)文件并使用数据库管理器运行它。如果它运行服务器,将应用程序联机,数据将很好地集成。
答案 3 :(得分:2)
到目前为止看起来更有希望的选项是使用Flyway。它是一种更自动化的方式,基本上可以自动处理数据库的升级过程。
答案 4 :(得分:1)
无需在JPA中编写单独的INSERT查询。 JpaRepository具有内置的saveAndFlush()
方法,您可以使用该方法将其插入数据库。希望这对您有用。