【发布时间】:2012-01-17 13:25:56
【问题描述】:
我想在独立应用程序中使用hibernate和嵌入式德比,我有一些问题:
- 我需要什么罐子?
- 什么是必要的休眠配置?
- 还有其他必要的配置吗?
- 查询/标准是否有任何问题/限制?
如果您还可以为我推荐一些关于这种方法的好教程,那将是更可取的,在此先感谢。
【问题讨论】:
我想在独立应用程序中使用hibernate和嵌入式德比,我有一些问题:
如果您还可以为我推荐一些关于这种方法的好教程,那将是更可取的,在此先感谢。
【问题讨论】:
我使用 Apache Derby 和 Hibernate 来测试我项目的模型类之一(它们的 equals、hashCode 实现、查询等)。 MySQL 用作生产数据库。我选择 Derby 而不是 HSQLDB,因为我遇到了 Hibernate 和 HSQLDB 的一些不兼容问题,这意味着,考虑到我的实体(它们的名称、模式、键)及其关系 Hibernate 无法在 HSQLDB 中创建我的数据库模式,而它可以与德比。也就是说,也许我搞砸了;也可以解决不兼容问题。
无论如何,这是我在测试中使用的(我已经修改了我的 pom.xml,以便它将 Derby 作为 runtime 依赖项包含并运行单个测试,以确保它是工作)。
pom.xml<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>
persistence.xml<?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>
Test实体@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();
【讨论】:
jdbc:derby:test;create=true 这样的 JDBC URL,将在您第一次连接时创建数据库。如果您使用<property name="hibernate.hbm2ddl.auto" value="create"/>,那么 Hibernate 将创建保存您的实体所需的表。生成的模式名称、表名等都可以通过标准 Java 注释进行控制。但是,我建议您手动创建数据库和表,不要依赖 Hibernate 为您创建 good 模式。您可以使用ij 与 Apache derby 进行交互,这就像 mysql 用于 MySQL 管理数据库等。
ij,就像mysql(客户端命令行界面工具)到MySQL。 It has an extensive documentation。基本上,您启动 ij 并连接到数据库:ij> connect 'jdbc:derby:<path-to-db>/database;create=true';。 create=true 告诉 ij 如果数据库不存在则创建该数据库。从那里你做你想做的事,创建表,删除它们,查询它们或其他任何东西。如果您不确定某事,我建议您参考文档,因为它写得很好且内容广泛。