JPA插入声明

时间:2010-06-21 14:52:27

标签: jpa

JPA插入语句的正确语法是什么?这可能听起来像一个简单的问题,但我一直无法找到答案。

我知道如何从Java代码中执行此操作,但我正在寻找一种在创建数据库时将对象插入数据库的方法。

有什么想法吗?

5 个答案:

答案 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()方法,您可以使用该方法将其插入数据库。希望这对您有用。