Java JPA Hibernate-排除类上的未知实体

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

当我运行名为UserServiceTest的测试类时,我得到了这个错误。奇怪的是,我并没有试图持久化UserServiceTest类型的实例

它失败的代码。如果我注释掉这段代码,其余的测试就会运行,我不会得到这个错误

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的代码吗?刚刚编辑了文章并包含了代码。请从你的评论中删除位置和网站。我也刚刚编辑了原稿。它的私人信息。除此之外,非常感谢您的解决方案!它工作得很好。我在拔头发。我不知道它会创建这种类型的内部类。我删除了它,但问题仍然是位置。请从您的评论中删除位置和网站。我也刚刚编辑了原稿。它的私人信息。除此之外,非常感谢您的解决方案!它工作得很好。我在拔头发。我不知道它会创建这种类型的内部类。我删除了它,但问题仍然是位置