- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这与上面的标签所声称的不是重复的。这个问题还没有被解答。
我正在尝试设置this tutorial以使hyperjaxb
在eclipse项目中工作。我如何才能看到持久性提供程序? hbm2ddl
尚未在数据库中创建表结构。这就是为什么应用程序看不到持久性提供程序的原因吗?还是因为persistence.xml
中target/generated-sources
中的src/main/java
内容无法从我的TestFunctions.java
试图在其中调用的persistence.xml
目录中访问?具体细节如下:这行代码:
entityManagerFactory = Persistence.createEntityManagerFactory("persistence.xml", persistenceProperties);
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named persistence.xml
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at maintest.TestFunctions.setUpPersistence(TestFunctions.java:119)
at maintest.Main.main(Main.java:10)
public void setUpPersistence(){
final Properties persistenceProperties = new Properties();
InputStream is = null;
try {
Class<? extends TestFunctions> c = getClass();
ClassLoader cl = c.getClassLoader();
is = cl.getResourceAsStream("persistence.properties");
persistenceProperties.load(is);
}catch (IOException i) {i.printStackTrace();}
finally {if (is != null) {try {is.close();} catch (IOException ignored) {}}}
entityManagerFactory = Persistence.createEntityManagerFactory("persistence.xml", persistenceProperties);
}
persistence.properties
:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence version="1.0" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit name="org.jvnet.hyperjaxb3.ejb.tests.po">
<class>org.jvnet.hyperjaxb3.ejb.tests.po.Items</class>
<class>org.jvnet.hyperjaxb3.ejb.tests.po.Items$Item</class>
<class>org.jvnet.hyperjaxb3.ejb.tests.po.PurchaseOrderType</class>
<class>org.jvnet.hyperjaxb3.ejb.tests.po.USAddress</class>
</persistence-unit>
</persistence>
META-INF
是:
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.username=someusername
hibernate.connection.password=somepassword
hibernate.connection.url=jdbc:mysql://localhost/somedatabasename
hibernate.hbm2ddl.auto=create-drop
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.jdbc.batch_size=0
Class c = Class.forName("org.eclipse.persistence.jpa.PersistenceProvider");
文件夹移到了与调用类相同的级别,但是出现了相同的错误。这是两个新的屏幕截图,显示了仍在其中引发错误的persistence.xml的位置:
TestFunctions.java
的第116行添加了
Main.java
,当我右键单击
Run As..Java Application
并执行
TestFunctions.setUpPersistence()
时,将触发以下错误:
Exception in thread "main" java.lang.ClassNotFoundException: org.eclipse.persistence.jpa.PersistenceProvider
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at maintest.TestFunctions.setUpPersistence(TestFunctions.java:116)
at maintest.Main.main(Main.java:10)
Class c = Class.forName("org.eclipse.persistence.jpa.PersistenceProvider");
方法:
public void setUpPersistence() throws ClassNotFoundException{
final Properties persistenceProperties = new Properties();
InputStream is = null;
try {
Class<? extends TestFunctions> c = getClass();
ClassLoader cl = c.getClassLoader();
is = cl.getResourceAsStream("persistence.properties");
persistenceProperties.load(is);
}catch (IOException i) {i.printStackTrace();}
finally {if (is != null) {try {is.close();} catch (IOException ignored) {}}}//org.jvnet.hyperjaxb3.ejb.tests.po
Class c = Class.forName("org.eclipse.persistence.jpa.PersistenceProvider");
entityManagerFactory = Persistence.createEntityManagerFactory(/*"org.jvnet.hyperjaxb3.ejb.tests.po"*//*"persistence.xml"*/"org.jvnet.hyperjaxb3.ejb.tests.po", persistenceProperties);
}
Class c = Class.forName("org.hibernate.ejb.HibernatePersistence");
替换为
Class c = Class.forName("javax.persistence.spi.PersistenceProvider");
时,出现类似的错误。但是,
javax.persistence.PersistenceException: No Persistence provider for EntityManager named org.jvnet.hyperjaxb3.ejb.tests.po
不会引发任何错误,因此程序会继续运行,直到将同一
hyperjaxb
错误引发到更下游。
persistence.xml
创建一个
persistence.xml
并将其放置在目标文件夹中。当
persistence.xml
处于该位置时,会发生此错误,并且如上所述,当我移动
hyperjaxb
时,该错误仍然存在。
最佳答案
我无法抗拒,这是我最后的帮助。 :)我是为您和可能遇到类似问题的所有用户编写的。
我相信您只是在Eclipse项目配置中遇到问题。 Eclipse项目中的路径似乎不正确。
通常,当使用File > Import... > Existing Maven Projects
将现有的Maven项目导入Eclipse时,m2eclipse
应该分析Maven项目的结构并自动使用(.classpath
和.project
文件)创建Eclipse项目。
这些项目中的路径是从Eclipse pom.xml
派生的。因此,实际上您不应该创建/修改/添加/删除/复制/移动/任何Eclipse源文件夹。如果执行此操作,您的Eclipse项目将不再与Maven项目同步,并且您将得到非常奇怪的结果。
有时m2eclipse
做得不好。有时您没有找到正确的源文件夹,某些东西丢失了等等。根据我的经验,随着时间的流逝,这种情况有了很大的改善,现在m2eclipse
就像一种魅力。从我在您的奋斗中所看到的,可能是您使用的是旧版本的m2eclipse
。也许不是,但是我还是建议检查一下。
接下来,有时m2eclispe
仍会夹紧。在这种情况下,强烈建议您执行以下操作:
清理项目:Project > Clean...
更新Maven项目(Alt + F5)。确保从pom.xml
更新项目配置
最后,您应该获得以下项目结构:
具体来说,您应该获得以下源文件夹:src\main\java
-主Java文件的源文件夹src\main\resources
-资源的源文件夹target\generated-sources\xjc
-生成代码的源文件夹。
重要提示:target\generated-sources
不同于您,但target\generated-sources\xjc
。
此文件夹包含生成的Java类。 (Hyperjaxb向其中添加了JPA批注)。
它还包含META-INF\persistence.xml
,这是一个持久性单元描述符。 META-INF\persistence.xml
资源由JPA规范指定。这是从中加载持久性单元的位置。
如果您已经生成了往返测试(从xml到数据库的返回),那么您还将在某处看到RoundtripTest
类。这是一个JUnit测试类,应该可以直接执行它。 (Run As > JUnit Test
)src\test\java
-测试类。src\test\resources
-测试资源
这是Maven项目的标准目录布局。唯一的特点是target\generated-sources\xjc
源文件夹,其中包含由架构编译器生成的代码。即使这绝对是标准的,它也是Maven代码生成插件在target\generated-sources\some-tool
目录中生成代码的常规约定。
下面,我从项目中发布.classpath
文件:
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry including="**/*.java" kind="src" output="target/classes" path="target/generated-sources/xjc">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry excluding="**" kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="output" path="target/classes"/>
</classpath>
pom.xml
重新生成项目结构,并在Eclipse中清理项目。打开您的
.classpath
文件,并将其与我发布的内容进行逐行比较。但是请先确定项目结构。
pom.xml
,它配置了生成而不是生成的代码。
src\main\java
包含
maintest\Main
和
TestFunctions
。如果要编写测试,请将测试类放入
src\test\java
,而不是
src\main\java
。
src\main\resources
包含
persistence.xml
,
sun-jaxb.episode
,
persistence.properties
和
schema.xsd
。只有
schema.xsd
应该在那里。
persistence.xml
和
sun-jaxb.episode
是生成的文件。并且,请参见上文,请勿移动它们。
persistence.properties
定义与用于测试的数据库的连接。因此它必须位于测试资源中,即
src\test\resources
。将其放入
src\main\resources
最终会将此文件添加到生成的JAR中,就像告诉所有人用于测试的数据库的用户名和密码一样
src\test\java
-可以,但是您的测试班级应该在这里。
src\test\resources
-
persistence.properties
应该在这里。
target\generated-sources
-这是错误的,应该是
target\generated-sources\xjc
org.jvnet.hyperjaxb3.ejb.test.po
软件包在
target\generated-sources
下。它是在
target\generated-sources\xjc
下生成的,所以我看到的意味着您已经移动了。不要这样做,请参见上文。
xjc
显示为程序包。实际上,这是(错误地)将
target\generated-sources
配置为源文件夹之后的剩余内容。此文件夹必须包含所有生成的源,现在仅包含
RoundtripTest
。这意味着您移动了生成的代码。不要这样做,请参见上面的命令。
m2eclipse
没有正确处理
pom.xml
,您可能缺少文件夹等。但是,不是让Eclipse项目文件正确生成我的
m2eclipse
,而是手动添加了
target\generated-sources
并开始移动生成的代码。这不是正确的方法。
.classpath
,直到它等于我发布的内容为止。我已经压缩并
uploaded我的示例项目肯定对我有用。您可以使用
File > Import... > Existing Projects into Eclipse
解压缩并导入它(不是Maven项目)。
RoundtripTest
作为JUnit测试执行。测试可能会失败,但是它必须运行,您不应该获得NPE等。我手头没有MySQL数据库,所以这是我现在得到的:
Detected [file:/C:/Projects/workspaces/hj3/hyperjaxb3-ejb-template-basic-0.6.0/target/classes/META-INF/persistence.xml].
RoundtripTest
Loading entity manager factory properties.
RoundtripTest
Loading entity manager factory properties from [file:/C:/Projects/workspaces/hj3/hyperjaxb3-ejb-template-basic-0.6.0/target/test-classes/persistence.properties].
RoundtripTest
Could not obtain connection to query metadata
org.hibernate.cfg.SettingsFactory
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.ConnectException
MESSAGE: Connection refused: connect
src\test\resources\persistence.properties
中正确配置了测试数据库,则应该可以连接到数据库。如果将
po.xml
文件放入
src\test\samples
,则往返测试将:
Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:hibernate3-maven-plugin
关于java - 没有名为persistence.xml的EntityManager的持久性提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26366556/
有一些使用多个数据源的示例: @Inject @DataSource("users") AgroalDataSource dataSource1; @Inject @DataSource("inven
我试图使用持久性和 servlet guice 扩展,让简单的 webapp 在 Jetty 上与 Guice 和 JPA 一起工作。 我写了这个服务实现类: public class PersonS
我使用 Hibernate 5.1.0.Final、Guice、Jersey。我有创建 EntityManagerFactory 的 HibernateModule并管理EntityManager实例
我正在使用 ThreadLocal 和请求/实体模式来获取实体。这种情况发生时,我关闭了一个实体管理器,并且在后台有一些实体可以编辑、复制和修改,然后我想将其保留或与新的实体管理器合并。我不知道这是一
好的,我正在使用 EJB 3.0 和 hibernate,我们将 .ear 文件放入嵌入 Apache Tomcat 6.0.18 的 Easy-Beans 1.0.1(带有 Hibernate)部署
我正在使用 Spring + JPA + Hibernate + EntityManager 与数据库对话。我收到“A JTA EntityManager cannot use getTransact
更新数据库时我应该更喜欢什么?这两种方法的优缺点是什么?我什么时候应该使用其中一种? public void disemployEmployee(Integer employeeId, Date en
我正在尝试在存储库中注入(inject) EntityManager。 编译成功,但是当我运行应用程序并发送一个发布请求时,我收到了这个错误: Unexpected error occurred: F
我正在尝试在 Spring Tools Suite 和 Pivotal tc Server Developer Edition 上开发 Spring+Hibernate+EntityManager+S
我有一个使用 spring boot + spring data JPA 的示例项目。在日志中,我观察到 EntityManagers 在我进行第一次 rest 调用之前被创建了几次。请澄清为什么会发
给定网络应用程序中的以下情况: // EntityManager em, one per Request with Spring's OpenEntityManagerInViewFilter //
当我们在 JAVA EE 环境中的 EntityManager 上使用 @PersistenceContext 注释时,容器将创建 entityManagerFactory(我猜是整个 session
我遇到了一种情况(我认为这很奇怪,但可能很正常),我使用 EntityManager.getReference(LObj.getClass(), LObj.getId()) 来获取数据库实体,然后通过
我有以下服务... @Stateless @LocalBean public class RandomService { @EJB RandomString stringTokenizer;
我在实体类中有这个函数,但 getDoctrine 不喜欢...... public function getObject() { $em = $this->getDoctrine()->ge
我正在尝试以级联方式保存某个对象并检索它。 我有 3 个对象超过 3 个实体。 实体: class Order { /** * @var integer $id *
我正在开发一个 JPA 应用程序(使用 hibernate ),我正在与 作斗争。自动冲洗 特征。 默认情况下,每当我们处理对任何实体的查询时,完整的 实体管理器 被冲洗。在大多数情况下这是可以的:我
我刚刚建立了一个到目前为止仍然非常小的项目 maven/jpa/hibernate 项目,我试图在其中持久化一个对象。 我的类(class)是一个非常简单的类(class): @Entity publ
我当前的项目使用 HSQLDB2.0 和 JPA2.0 。 场景是:我查询数据库以获取 contactDetails 的列表的 person .我删单contactInfo在 UI 中,但不保存该数据
我是 jpa 和 spring 世界的新手,我目前正在对一个简单的方法进行一些单元测试,但只有当我在单元测试模式下运行我的测试类时才会继续收到此错误消息: java.lang.IllegalState
我是一名优秀的程序员,十分优秀!