在嵌入式derby中使用hibernate

在嵌入式derby中使用hibernate,hibernate,maven,derby,Hibernate,Maven,Derby,我想在独立应用程序中使用hibernate和嵌入式derby,我有一些问题: 我需要什么罐子 什么是必要的hibernate配置 是否有其他必要的配置 它在查询/标准方面是否存在任何问题/限制 如果您还可以为我推荐一些关于这种方法的好教程,那会更好,提前谢谢。我使用ApacheDerby和Hibernate来测试我项目的一个模型类(它们的等价物、哈希代码实现、查询等)。MySQL被用作生产数据库。我选择Derby而不是,因为我遇到了一些与Hibernate和HSQLDB不兼容的问题,这意味着,给

我想在独立应用程序中使用hibernate嵌入式derby,我有一些问题:

  • 我需要什么罐子
  • 什么是必要的hibernate配置
  • 是否有其他必要的配置
  • 它在查询/标准方面是否存在任何问题/限制

  • 如果您还可以为我推荐一些关于这种方法的好教程,那会更好,提前谢谢。

    我使用ApacheDerby和Hibernate来测试我项目的一个模型类(它们的等价物、哈希代码实现、查询等)。MySQL被用作生产数据库。我选择Derby而不是,因为我遇到了一些与Hibernate和HSQLDB不兼容的问题,这意味着,给定我的实体(它们的名称、模式、键)及其关系,Hibernate无法在HSQLDB中创建我的数据库模式,而它可以在Derby中创建。也就是说,也许我把事情搞砸了;同时,不兼容也可以得到解决

    无论如何,下面是我在测试中使用的内容(我修改了我的
    pom.xml
    ,以便它将Derby作为一个运行时依赖项,并运行一个测试,以确保它正常工作)

    pom.xml
    测试
    实体 试验
    如何创建数据库和填充表?@Msaleh,如果使用JDBC-URL,如
    JDBC:derby:test;create=true
    第一次连接时将创建一个数据库。如果使用
    ,则Hibernate将创建保存实体所需的表。生成的模式名、表名等都可以通过标准Java注释进行控制。但是,我建议您手动创建数据库和表,不要依赖Hibernate为您创建好的模式。您可以使用
    ij
    与Apache derby进行接口,这类似于mysql管理数据库的
    mysql
    。如何手动创建derby嵌入式数据库?@Msaleh使用
    ij
    ,这类似于mysql的
    mysql
    (客户端命令行界面工具)。基本上,您启动
    ij
    并连接到数据库:
    ij>connect'jdbc:derby:/database;create=true'
    create=true
    告诉
    ij
    如果数据库不存在,则创建数据库。从那以后,你可以做你想做的事情,创建表,删除表,查询表或者其他任何事情。如果您对某些内容不确定,我建议您参考文档,因为它写得很好,而且内容广泛。非常感谢您提供了这么好的答案,请使用我们在评论中讨论的内容更新答案。
    <dependencies>                                      
      ...                               
      <dependency>                                      
        <groupId>org.hibernate</groupId>                
        <artifactId>hibernate-entitymanager</artifactId>
        <version>3.6.8.Final</version>                  
      </dependency>                                     
      <dependency>                                      
        <groupId>org.apache.derby</groupId>             
        <artifactId>derby</artifactId>                  
        <version>10.8.2.2</version>                     
        <scope>runtime</scope>                          
      </dependency>                                     
      <!-- 
         an slf4j implementation is needed by
         hibernate so that it could log its *stuff*
      -->
      <dependency>                                      
        <groupId>org.slf4j</groupId>                    
        <artifactId>slf4j-simple</artifactId>           
        <version>1.6.4</version>                        
        <scope>runtime</scope>                          
      </dependency>                                     
      ...                             
    </dependencies>                                     
    
    <?xml version="1.0" encoding="UTF-8"?>
    <persistence xmlns="http://java.sun.com/xml/ns/persistence"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
      version="2.0">
      <persistence-unit name="test">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <class>Test</class>
        <properties>
          <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
          <!--
            if you don't have a database already created
            append ;create=true to end of the jdbc url
          -->
          <property name="javax.persistence.jdbc.url" value="jdbc:derby:test"/>
          <property name="javax.persistence.jdbc.user" value="root"/>
          <property name="javax.persistence.jdbc.password" value="root"/>
          <!--  
            if you just created the database, maybe
            you want hibernate to create a schema for you
    
            <property name="hibernate.hbm2ddl.auto" value="create"/> 
          -->
        </properties>
      </persistence-unit>
    </persistence>
    
    @Entity
    @Table(name = "test")
    public class Test {
    
      @Id
      public int id;
    
      @Basic
      public String data;
    }
    
    EntityManagerFactory emf = Persistence.createEntityManagerFactory("test");  
    EntityManager em = emf.createEntityManager();                               
    EntityTransaction tx = em.getTransaction();                                 
    
    Test test = em.find(Test.class, 1);                                         
    if (test == null) {                                                         
      test = new Test();                                                        
      test.id = 1;                                                              
      test.data = "a";                                                          
    
      tx.begin();                                                               
      em.persist(test);                                                         
      tx.commit();                                                              
    }                                                                           
    
    System.out.format("Test{id=%s, data=%s}\n", test.id, test.data);            
    
    em.close();                                                                 
    emf.close();