将实体持久化到数据库Java

时间:2011-08-26 05:23:47

标签: database jpa persistence

我刚开始使用持久性和数据库来使用webapps。我创建了几个Entity类,并在Eclipse中设置了数据库连接,但我不确定如何从这些实体生成表。到目前为止,这是我设法提出的所有内容:

public class Main {

    @Resource
    static UserTransaction utx;

    @PersistenceUnit
    static EntityManagerFactory emf;

  public static void main(String[] args) throws Exception {
    EntityManager em = emf.createEntityManager();
    utx.begin();
    em.joinTransaction();

    User user = new User();
    user.setUsername("cvolkernick");

    em.persist(user);

    utx.commit();

    em.flush();

    em.close();
    emf.close();
  }
}

1 个答案:

答案 0 :(得分:3)

您可以使用Dali JPA工具从实体声明创建表。只要您的项目配置了JPA方面,您就可以访问这些工具。从实体创建表就像右键单击项目一样简单,然后浏览上下文菜单,如下面的屏幕截图所示:

Eclipse- JPA - Create Tables from Entities

请注意,最好以这种方式创建表,或者自己手动编写DDL语句。建议不要让JPA提供程序为您创建表,因为您将失去将表定义置于版本控制之下的能力。它们也不是最理想的not meant to be used in production。即使是小型项目,也不值得麻烦,因为JPA提供程序(EclipseLink或Hibernate)生成微调DDL语句的能力非常有限。在任何情况下,如果您希望让JPA提供商为您完成此项工作,详情如下:

如果您的JPA提供程序是EclipseLink

您的persistence.xml文件应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence ...>
    <persistence-unit ...>
        ...
        <properties>
            <!-- valid values include 'none, 'drop-and-create-tables' and 'create-tables' -->
            <property name="eclipselink.ddl-generation" value="create-tables"/>
            <!-- valid values include 'both', 'database' and 'sql-script' -->
            <property name="eclipselink.ddl-generation.output-mode" value="database"/>
            ...
        </properties>
    </persistence-unit>
</persistence>

您可以通过使用Persistence XML编辑器打开persistence.xml文件,从Eclipse配置这些值:

EclipseLink Persistence XML editor

可以在EclipseLink wiki

中找到EclipseLink架构生成属性和值的详细信息

如果您的JPA提供程序是Hibernate

您的persistence.xml文件应如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<persistence ...>
    <persistence-unit ...>
        ...
        <properties>
            <!-- valid values include 'validate', 'update', 'create' and 'create-drop' -->
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
            ...
        </properties>
    </persistence-unit>
</persistence>

与EclipseLink值不同,Hibernate的值不能从Eclipse的Persistence XML编辑器配置。您可以在Hibernate Core documentation中找到其他Hibernate属性。

另外,请注意,在EclipseLink和Hibernate的情况下,您可能需要指定其他属性,如连接池配置和数据库方言,以帮助架构生成器。