Java JPA Hibernate-排除类上的未知实体
当我运行名为UserServiceTest的测试类时,我得到了这个错误。奇怪的是,我并没有试图持久化UserServiceTest类型的实例 它失败的代码。如果我注释掉这段代码,其余的测试就会运行,我不会得到这个错误Java JPA Hibernate-排除类上的未知实体,java,hibernate,jpa,junit,Java,Hibernate,Jpa,Junit,当我运行名为UserServiceTest的测试类时,我得到了这个错误。奇怪的是,我并没有试图持久化UserServiceTest类型的实例 它失败的代码。如果我注释掉这段代码,其余的测试就会运行,我不会得到这个错误 User persistedUser = new User() { { setUsername("Jan123"); setName("Jan"); setText("test bio"); setLocati
User persistedUser = new User() {
{
setUsername("Jan123");
setName("Jan");
setText("test bio");
setLocation("<location>");
setWebsite("<website>");
}
};
entityManager.getTransaction().begin();
entityManager.persist(persistedUser);
entityManager.getTransaction().commit();
User persistedUser=新用户(){
{
setUsername(“Jan123”);
setName(“Jan”);
setText(“测试生物”);
设置位置(“”);
SET网站(“”);
}
};
entityManager.getTransaction().begin();
entityManager.persist(persistedUser);
entityManager.getTransaction().commit();
java.lang.IllegalArgumentException:未知实体:
UserServiceTest$1位于
org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:808)
位于org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789)
在
UserServiceTest.setUp(UserServiceTest.java:55)
在
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机
方法)在
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
org.junit.runners.model.FrameworkMethod$1.runReflectVeCall(FrameworkMethod.java:50)
在
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
在
org.junit.runners.model.FrameworkMethod.invokeeexplosive(FrameworkMethod.java:47)
在
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
在
org.junit.internal.runners.statements.runafter.evaluate(runafter.java:27)
位于org.junit.runners.ParentRunner.run(ParentRunner.java:363)
org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:252)
在
org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:141)
在
org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:112)
在
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机
方法)在
java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在
java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
位于java.base/java.lang.reflect.Method.invoke(Method.java:566)
org.apache.maven.surefire.util.ReflectionUtils.invokeMethodWithArray(ReflectionUtils.java:189)
在
org.apache.maven.surefire.booter.ProviderFactory$ProviderProxy.invoke(ProviderFactory.java:165)
在
org.apache.maven.surefire.booter.ProviderFactory.invokeProvider(ProviderFactory.java:85)
在
org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:115)
在
org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:75)
这是我的persistence.xml。我检查了它是否是通过故意对XML进行错误格式化来使用的,以查看它是否抛出了XML解析错误,确实如此。正如我在构建的输出和SQLServerManagementStudio中看到的那样,表的创建非常好
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="KwetterPUTest" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>Kweet</class>
<class>User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.url" value="jdbc:sqlserver://localhost;databaseName=KwetterTest;" />
<property name="hibernate.connection.username" value="sa" />
<property name="hibernate.connection.password" value="admin" />
<property name="hibernate.show_sql" value="true"/>
<property name="javax.persistence.jdbc.driver" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
<property name="javax.persistence.schema-generation.database.action" value="drop-and-create"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.SQLServerDialect"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
</properties>
</persistence-unit>
</persistence>
org.hibernate.jpa.HibernatePersistenceProvider
奎特
使用者
真的
编辑:以下是UserServiceTest中的相关代码。我在NetBeans中搜索了可能错误实例化的UserServiceTest的任何实例。没有
private static EntityManagerFactory entityManagerFactory;
private static EntityManager entityManager;
private static UserService userService;
private static User persistedUser;
@BeforeClass
public static void setUp() {
entityManagerFactory = Persistence.createEntityManagerFactory("KwetterPUTest");
entityManager = entityManagerFactory.createEntityManager();
userService = new UserService(new UserDAOJPAImpl(entityManager));
persistedUser = new User() {
{
setUsername("Jan123");
setName("Jan");
setText("test bio");
setLocation("<location>");
setWebsite("<website>");
}
};
entityManager.getTransaction().begin();
entityManager.persist(persistedUser);
entityManager.getTransaction().commit();
}
私有静态EntityManagerFactory EntityManagerFactory;
私有静态实体管理器实体管理器;
私有静态用户服务;
私有静态用户持久化服务器;
@课前
公共静态无效设置(){
entityManagerFactory=Persistence.createEntityManagerFactory(“KwetterPUTest”);
entityManager=entityManagerFactory.createEntityManager();
userService=newuserservice(newuserdaojpaimpl(entityManager));
persistedUser=新用户(){
{
setUsername(“Jan123”);
setName(“Jan”);
setText(“测试生物”);
设置位置(“”);
SET网站(“”);
}
};
entityManager.getTransaction().begin();
entityManager.persist(persistedUser);
entityManager.getTransaction().commit();
}
为感兴趣的人编辑2:pom文件。我使用了Hibernate的最新4.x版本,以及最新的5.x和5.2.2。没有任何改变
朱尼特
朱尼特
4.12
测试
org.hibernate
冬眠核心
5.4.2.最终版本
假如
com.microsoft.sqlserver
mssql jdbc
7.2.1.jre8
测试
爪哇
JavaEEAPI
8
罐子
为什么要这样实例化用户类:
persistedUser = new User() {
{
setUsername("Jan123");
setName("Jan");
setText("test bio");
setLocation("<location>");
setWebsite("<website>");
}
};
persistedUser = new User();
persistedUser.setUsername("Jan123");
persistedUser.setName("Jan");
persistedUser.setText("test bio");
persistedUser.setLocation("<location>");
persistedUser.setWebsite("<website>");
为什么要这样实例化用户类:
persistedUser = new User() {
{
setUsername("Jan123");
setName("Jan");
setText("test bio");
setLocation("<location>");
setWebsite("<website>");
}
};
persistedUser = new User();
persistedUser.setUsername("Jan123");
persistedUser.setName("Jan");
persistedUser.setText("test bio");
persistedUser.setLocation("<location>");
persistedUser.setWebsite("<website>");
你能显示UserServiceTest的代码吗?刚刚编辑了文章并包含了代码。你能显示UserServiceTest的代码吗?刚刚编辑了文章并包含了代码。请从你的评论中删除位置和网站。我也刚刚编辑了原稿。它的私人信息。除此之外,非常感谢您的解决方案!它工作得很好。我在拔头发。我不知道它会创建这种类型的内部类。我删除了它,但问题仍然是位置。请从您的评论中删除位置和网站。我也刚刚编辑了原稿。它的私人信息。除此之外,非常感谢您的解决方案!它工作得很好。我在拔头发。我不知道它会创建这种类型的内部类。我删除了它,但问题仍然是位置