- 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/
我是 C 语言新手,我编写了这个 C 程序,让用户输入一年中的某一天,作为返回,程序将输出月份以及该月的哪一天。该程序运行良好,但我现在想简化该程序。我知道我需要一个循环,但我不知道如何去做。这是程序
我一直在努力找出我的代码有什么问题。这个想法是创建一个小的画图程序,并有红色、绿色、蓝色和清除按钮。我有我能想到的一切让它工作,但无法弄清楚代码有什么问题。程序打开,然后立即关闭。 import ja
我想安装screen,但是接下来我应该做什么? $ brew search screen imgur-screenshot screen
我有一个在服务器端工作的 UDP 套接字应用程序。为了测试服务器端,我编写了一个简单的 python 客户端程序,它发送消息“hello world how are you”。服务器随后应接收消息,将
我有一个 shell 脚本,它运行一个 Python 程序来预处理一些数据,然后运行一个 R 程序来执行一些长时间运行的任务。我正在学习使用 Docker 并且我一直在运行 FROM r-base:l
在 Linux 中。我有一个 c 程序,它读取一个 2048 字节的文本文件作为输入。我想从 Python 脚本启动 c 程序。我希望 Python 脚本将文本字符串作为参数传递给 c 程序,而不是将
前言 最近开始整理笔记里的库存草稿,本文是 23 年 5 月创建的了(因为中途转移到 onedrive,可能还不止) 网页调起电脑程序是经常用到的场景,比如百度网盘下载,加入 QQ 群之类的 我
对于一个类,我被要求编写一个 VHDL 程序,该程序接受两个整数输入 A 和 B,并用 A+B 替换 A,用 A-B 替换 B。我编写了以下程序和测试平台。它完成了实现和行为语法检查,但它不会模拟。尽
module Algorithm where import System.Random import Data.Maybe import Data.List type Atom = String ty
我想找到两个以上数字的最小公倍数 求给定N个数的最小公倍数的C++程序 最佳答案 int lcm(int a, int b) { return (a/gcd(a,b))*b; } 对于gcd,请查看
这个程序有错误。谁能解决这个问题? Error is :TempRecord already defines a member called 'this' with the same paramete
当我运行下面的程序时,我在 str1 和 str2 中得到了垃圾值。所以 #include #include #include using namespace std; int main() {
这是我的作业: 一对刚出生的兔子(一公一母)被放在田里。兔子在一个月大时可以交配,因此在第二个月的月底,每对兔子都会生出两对新兔子,然后死去。 注:在第0个月,有0对兔子。第 1 个月,有 1 对兔子
我编写了一个程序,通过对字母使用 switch 命令将十进制字符串转换为十六进制,但是如果我使用 char,该程序无法正常工作!没有 switch 我无法处理 9 以上的数字。我希望你能理解我,因为我
我是 C++ 新手(虽然我有一些 C 语言经验)和 MySQL,我正在尝试制作一个从 MySQL 读取数据库的程序,我一直在关注这个 tutorial但当我尝试“构建”解决方案时出现错误。 (我正在使
仍然是一个初学者,只是尝试使用 swift 中的一些基本函数。 有人能告诉我这段代码有什么问题吗? import UIKit var guessInt: Int var randomNum = arc
我正在用 C++11 编写一个函数,它采用 constant1 + constant2 形式的表达式并将它们折叠起来。 constant1 和 constant2 存储在 std::string 中,
我用 C++ 编写了这段代码,使用运算符重载对 2 个矩阵进行加法和乘法运算。当我执行代码时,它会在第 57 行和第 59 行产生错误,非法结构操作(两行都出现相同的错误)。请解释我的错误。提前致谢:
我是 C++ 的初学者,我想编写一个简单的程序来交换字符串中的两个字符。 例如;我们输入这个字符串:“EXAMPLE”,我们给它交换这两个字符:“E”和“A”,输出应该类似于“AXEMPLA”。 我在
我需要以下代码的帮助: 声明 3 个 double 类型变量,每个代表三角形的三个边中的一个。 提示用户为第一面输入一个值,然后 将用户的输入设置为您创建的代表三角形第一条边的变量。 将最后 2 个步
我是一名优秀的程序员,十分优秀!