【问题标题】:JPA VS JDBC - 2 questionsJPA 与 JDBC - 2 个问题
【发布时间】:2012-08-24 20:17:11
【问题描述】:

我正在使用 Eclipse Juno IDE

在 phpMyAdmin 中,我创建了自己的数据库和表。 现在使用 JDBC,我输入了一些记录。

接下来我尝试使用 JPA 实现一些查询,我创建了一个实体 具有相同的列和连接到我的数据库的 persistence.xml。 但是当我运行程序时,它会删除所有记录并创建 我的数据库中有一个新的空表(同名)。 所以我的问题是:我如何连接到数据库中的现有表但不创建 一个新的。

另一个问题是:我没有给我的表一个主键,因为我的表是 关于司机旅行,所以每个司机可以旅行很多次......所以如果我使用主要 键它不会添加有关驱动程序的新数据。使用 JDBC 它可以正常工作。 但是对于JPA,实体需要一些字段作为主键..所以我该如何添加 JPA 中有关同一驱动程序的新数据?

持久性文件:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xsi:schemaLocation="http://java.sun.com/xml/ns/persistence                                   
         http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" 
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> 
         <persistence-unit transaction-type="RESOURCE_LOCAL" name="MyJPA"> 
             <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> 
             <class>pack.bl.Travels</class> 
             <properties> <property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/> 
                 <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/drivers"/> 
                 <property name="javax.persistence.jdbc.password" value=""/> 
                 <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/> 
                 <property name="javax.persistence.jdbc.user" value="root"/>

             </properties> 
         </persistence-unit> 

代码:

     EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyJPA");
     EntityManager em = emf.createEntityManager();

     List<Travels> allTravels = em.createQuery("SELECT t FROM travels t",Travels.class).getResultList();
     for (Travels s : allTravels)
         System.out.println(s.toString());


     em.close();

【问题讨论】:

  • 能否请出示您的 jpa 配置文件
  • 我认为你的配置文件没有问题。你有没有创建你的 EntityManagerFactory
  • EntityManagerFactory emf = Persistence.createEntityManagerFactory("MyJPA");
  • 你能提供更多的 EntityManagerFactory.did 你把键值对 hibernate.hbm2ddl.auto","create-drop"
  • 我添加了代码。我注意到它什么也没返回,所以我知道它是创建一个新表并删除旧表的数据..

标签: java database jpa jdbc entity


【解决方案1】:

点击 jpa 配置链接

http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html

在配置 xml 文件中添加代码

<property name="hibernate.hbm2ddl.auto" value="validate"/>

【讨论】:

    【解决方案2】:

    在您的休眠配置中,确保 hibernate.hbm2ddl.auto 未设置为 create-drop(因为听起来就是这样)。 尝试将其设置为验证 http://docs.jboss.org/hibernate/orm/3.3/reference/en/html/session-configuration.html

    【讨论】:

      【解决方案3】:

      将id 自动增量字段添加到您的表中。它将是主键。

      关于表的自动创建,看这里(我假设你使用 Hibernate 作为 JPA 实现): Hibernate hbm2ddl.auto possible values and what they do?

      【讨论】:

      • 嗨,我添加了一个 id 自动增量字段,但是当我尝试添加新记录时,它给了我一个奇怪的异常
      猜你喜欢
      • 1970-01-01
      • 2019-08-11
      • 2011-06-12
      • 2014-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2017-07-17
      相关资源
      最近更新 更多