【发布时间】:2011-03-06 08:52:39
【问题描述】:
JPA 插入语句的正确语法是什么?这听起来像是一个简单的问题,但我一直找不到答案。
我知道如何通过 Java 代码执行此操作,但我正在寻找一种在创建数据库时将对象插入数据库的方法。
有什么想法吗?
【问题讨论】:
-
这是一个很好的例子,最不正确的答案被标记为正确的解决方案。请考虑将 frm 或 Ben Hoffstein 答案标记为有效。
标签: jpa
JPA 插入语句的正确语法是什么?这听起来像是一个简单的问题,但我一直找不到答案。
我知道如何通过 Java 代码执行此操作,但我正在寻找一种在创建数据库时将对象插入数据库的方法。
有什么想法吗?
【问题讨论】:
标签: jpa
JPA 中没有 INSERT 语句。您必须使用 EntityManager 插入新实体。 JPA 中唯一允许的语句是 SELECT、UPDATE 和 DELETE。
【讨论】:
这是关于使用 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();
【讨论】:
如果你想在 java 之外的数据库中插入数据,你需要使用原生 SQL。使用 SQL 标准确保大多数数据库都可以执行脚本。当应用程序运行时,JPA 会对新数据进行映射,并在需要时将其转换为对象。
如何确保脚本适用于所有数据库?好吧,这与任何 DBA 在进行存储过程或本机查询时遇到的问题相同……这就是 JPA 存在的原因,以避免直接在 SQL 中进行,但我知道有时需要这种方式。
我建议你制作 3 个主要脚本。一种用于 Oracle,一种用于 SQL Server(2005 到 2008 版本的日期数据类型存在一些问题,所以要小心),一种用于 MySQL。使用标准 SQL 启动您的脚本,当您在此数据库中对其进行测试时,您会发现需要对每个 DBMS 进行一些修复。
如果你得到它,你可以创建一个文件脚本 (*.sql) 文件并使用 DB 管理器运行它。如果它运行服务器,将应用程序上线,数据将被很好地集成。
【讨论】:
目前看来更有希望的选项是使用Flyway。它是一种更自动化的方式,并且基本上自动处理数据库的升级过程。
【讨论】:
无需在 JPA 中编写单独的 INSERT 查询。 JpaRepository 具有内置的saveAndFlush() 方法,您可以使用它来插入数据库。希望这对你有用。
【讨论】: