【问题标题】:SQLite, NetBeans, EclipseLink and JPA - NetBeans keeps starting Apache Derby instead of SQLite DBSQLite、NetBeans、EclipseLink 和 JPA - NetBeans 不断启动 Apache Derby 而不是 SQLite DB
【发布时间】:2016-01-07 10:59:24
【问题描述】:

我在 NetBeans 上苦苦挣扎,但未能创建一个连接到 SQLite 数据库的项目(基于 Vaadin -> Maven)。出于某种原因,每次我运行我的项目时:

  • NetBeans 启动 Apache Derby 数据库
  • JPA 不会在我的 SQLite 表中生成表(可能是因为我从未设法连接到它)

我做了以下事情:

  1. “安装”SQLite JDBC 驱动程序 - 下载 jar,进入 Services -> Database 并创建一个指向 jar 的新连接。我将其命名为 SQLite 3.8.11.2。它已成功添加并列在 Databases -> Drivers 下。
  2. 添加到数据库的连接 - 数据库是使用命令行工具创建的,位于 NetBeans Maven 项目的根目录中。目前它是空的,因为我想使用 JPA 从相应的实体类生成我的表。我添加了连接,它指向cookbook.sqlite 文件。为了检查在这个阶段一切是否正常,我使用 NetBeans 的用户界面创建了一个小表,添加了一堆东西,然后使用终端检查数据库文件是否已更改以及它包含的内容。这里没有问题。
  3. 解决 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>
    
  4. 创建了一个持久化单元 - 我有 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


    【解决方案1】:

    如果连接设置不正确。

    1. 使用 Netbeans 菜单:Windows -> Services 显示服务选项卡。
    2. 扩展服务器
    3. 扩展 GlassFish 服务器
    4. 扩展资源
    5. 扩展 JDBC
    6. 扩展 JDBC 资源
    7. 选择您的资源名称。
    8. 右键单击属性。记下池名称
    9. 扩展连接池
    10. 选择您刚刚记下的池。
    11. 右键单击属性。
    12. 编辑属性以使用 sqlite 而不是 derby。网址应为jdbc:sqlite:&lt;path to cookbook.sqlite&gt;

    如果您还没有设置资源。

    1. 选择您的项目。
    2. 右键单击新建 -> 其他
    3. 在对话框中选择类别 = Glassfish,文件类型 = JDBC 资源
    4. 选择创建新的 JDBC 连接池。
    5. 将名称更改为您的资源名称
    6. 单击“下一步”两次
    7. 将连接池名称设置为您能记住的名称。
    8. 将数据源类名称设置为您想要的任何名称。
    9. 设置资源类型 javax.sql.ConnectiPoolDataSource
    10. 点击下一步
    11. 检查对话框最后一个屏幕上的设置,然后单击完成。

    创建映射到表的类:

    1. 选择您的项目。
    2. 右键单击新建 -> 其他
    3. 在对话框中选择类别 = 持久性,文件类型 = 实体类
    4. 更改类名和包名

    有些教程可能值得快速完成,即使它们也涵盖了一些不相关的材料,它们并不长。

    Getting Started with Java EE Applications
    Creating a Simple Web Application Using a MySQL Database

    和/或

    查看示例,位于文件 > 新项目 > 示例 > Java EE > Web JPA

    【讨论】:

    • 感谢您的回复!我的 JDBC 资源中没有我的 cookbook_db。尝试了各种方法以添加它,但最后重新安装服务器确实注册了数据库(真的很奇怪)。我还必须手动编辑glassfish-resources.xml。现在至少德比还没有开始。但是 JPA 似乎没有生成我的表。在 Eclipse 中,我可以使用项目的上下文菜单并转到JPA Tools,然后从那里选择表的生成选项。但是在 NetBeans 中没有这样的东西。我读到它应该自动执行,但在我的情况下不是。有什么想法吗?
    • 我不确定问题出在哪里,但我已尝试记录并提供一些可能的提示。
    • 问题在于,与 NetBeans 中的 Eclipse 项目(使用 Ivy 的 Vaadin)不同,我不知道如何从我的实体自动生成 tne DB 表。我已经查看了多个教程,但仍然......至于 NetBeans 示例 JPA 项目 - 这不好,因为它不使用 Maven 或 Ivy,这使得我无法将它与 Vaadin 集成(可能是可能的,但数量工作量太大)。我还成功地在 Eclipse 中创建了多个 JPA 项目,因此我对整个实体事物有一些了解。 NetBeans CRUD 示例(JPA+Maven)过于广泛。
    • This feature 是我在 NetBeans 中寻找但找不到的内容。如前所述,我已将persistence.xml 中的表生成策略设置为drop-and-create,但我不知道如何激活它。我读过它应该在您运行项目时自动触发,但我的情况并非如此。
    • 经过一番挣扎后,我切换到 Tomcat 8。不得不修复这个和那个,并将 sqlite-jdbc 添加到 pom.xml 作为依赖项,但现在一切都很好。我还发现为什么实际上 GlassFish 会自动启动 Derby - 当您转到服务器的属性时,实际上有一个复选框可以做到这一点。 :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 2023-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多