【发布时间】:2016-01-07 10:59:24
【问题描述】:
我在 NetBeans 上苦苦挣扎,但未能创建一个连接到 SQLite 数据库的项目(基于 Vaadin -> Maven)。出于某种原因,每次我运行我的项目时:
- NetBeans 启动 Apache Derby 数据库
- JPA 不会在我的 SQLite 表中生成表(可能是因为我从未设法连接到它)
我做了以下事情:
- “安装”SQLite JDBC 驱动程序 - 下载 jar,进入 Services -> Database 并创建一个指向 jar 的新连接。我将其命名为 SQLite 3.8.11.2。它已成功添加并列在 Databases -> Drivers 下。
-
添加到数据库的连接 - 数据库是使用命令行工具创建的,位于 NetBeans Maven 项目的根目录中。目前它是空的,因为我想使用 JPA 从相应的实体类生成我的表。我添加了连接,它指向
cookbook.sqlite文件。为了检查在这个阶段一切是否正常,我使用 NetBeans 的用户界面创建了一个小表,添加了一堆东西,然后使用终端检查数据库文件是否已更改以及它包含的内容。这里没有问题。 -
解决 Maven 依赖项 - 到我添加的项目的
pom.xml内的<dependencies/>:<dependencies> <!-- various other dependencies mostly related to Vaadin --> ... <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0.2</version> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.5.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>org.eclipse.persistence.jpa.modelgen.processor</artifactId> <version>2.5.2</version> <scope>provided</scope> </dependency> </dependencies> -
创建了一个持久化单元 - 我有 3 个实体类 -
User、Ingredient和Recipe。生成的persistence.xml包含:<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <persistence-unit name="CookbookPU" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <non-jta-data-source>cookbook_db</non-jta-data-source> <class>com.ava.cookbook.models.User</class> <class>com.ava.cookbook.models.Ingredient</class> <class>com.ava.cookbook.models.Recipe</class> <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> <properties> <property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/> <property name="javax.persistence.jdbc.driver" value="org.sqlite.JDBC"/> <property name="javax.persistence.jdbc.url" value="jdbc:sqlite:/PATH_TO_PROJECT_ROOT/cookbook_db.sqlite"/> <property name="javax.persistence.jdbc.user" value="cookbook"/> <property name="javax.persistence.jdbc.password" value="cookbook"/> <property name="eclipselink.logging.level" value="FINEST"/> </properties> </persistence-unit> </persistence>
请注意,架构生成设置为drop-and-create。
基本上这些是我的设置。当我尝试在输出窗口中运行项目时,会出现四个新选项卡:
- Run (Cookbook) - 这个告诉我有关正在运行的项目状态的信息(因为我还没有开始实际访问数据库(我无法连接到:3)它运行得非常好)
- GlassFish Server 4.1 - 有关运行项目的 GlassFish 服务器的信息
- 浏览器日志 - 我正在使用 NetBeans 连接器,并且在 Google Chrome 中运行 Vaadin 项目时,此选项卡会显示一堆与 Vaadin 相关的事件
-
Java DB 数据库进程 - 这个是所有这一切中的无赖。这里的详细信息是:
Fri Oct 09 15:02:47 CEST 2015 : Security manager installed using the Basic server security policy. Fri Oct 09 15:02:48 CEST 2015 : Apache Derby Network Server - 10.11.1.2 - (1629631) started and ready to accept connections on port 1527
在我看到之前我认为我已经把整个 JPA 实体的事情搞砸了,但是在我特别注意到第二条消息之后,很明显该项目没有连接到 SQLite 数据库而是运行它自己的德比 DB。
我对 Maven、EclipseLink、JPA 和 NetBeans 几乎没有任何经验,所以我很可能忽略了一些东西。一些建议甚至解决方案将不胜感激。
【问题讨论】:
标签: java sqlite maven jpa netbeans