java.lang.IllegalArgumentException:未知实体:Jpa

java.lang.IllegalArgumentException:未知实体:Jpa,java,hibernate,jpa,jpql,illegalargumentexception,Java,Hibernate,Jpa,Jpql,Illegalargumentexception,我想按某人的id删除此人,但给出了一个错误: 线程“main”java.lang.IllegalArgumentException中的异常:未知 实体:org.hibernate.query.internal.QueryImpl 在数据库工作中查找实体的方法: public class MySQLPersonDAO implements PersonDAO { @Override public void deleteById(int id) {

我想按某人的
id
删除此人,但给出了一个错误:

线程“main”java.lang.IllegalArgumentException中的异常:未知 实体:org.hibernate.query.internal.QueryImpl

在数据库工作中查找实体的方法:

   public class MySQLPersonDAO implements PersonDAO {
     @Override
        public void deleteById(int id) {
            EntityManager em = FACTORY.createEntityManager();
            EntityTransaction transaction = em.getTransaction();
            transaction.begin();
            TypedQuery query = em.createQuery("SELECT p FROM Person p WHERE p.id = :id", Person.class);
            query.setParameter("id", id);
            em.remove(query); // hier mistake
            transaction.commit();
            em.close();
        }

@Entity
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "person_id")
    private int id;

    private String name;

    private String password;
//getters,setters,constructor
坚持 是否需要显式指定所有实体

    <persistence-unit name="myjpa">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class> com.evghenii.domain.Person</class>
        <properties>
            <property name="hibernate.connection.driver_class" value="com.mysql.cj.jdbc.Driver"/>
            <property name="hibernate.connection.password" value="root"/>
            <property name="hibernate.connection.username" value="root"/>
            <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/board_jpa?serverTimezone=Europe/Berlin"/>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect"/>
            <!--<property name="hibernate.hbm2ddl.auto" value="create"/>-->
            <property name="hibernate.hbm2ddl.auto" value="update"/>
            <property name="hibernate.show_sql" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

org.hibernate.jpa.HibernatePersistenceProvider
com.evghenii.domain.Person
马文


org.hibernate
冬眠核心
5.4.11.最终版本
mysql
mysql连接器java
8.0.19
org.hibernate
休眠实体管理器
5.4.12.最终版本
org.hibernate
休眠验证器
6.0.17.1最终版本

正如消息所说,remove想要删除一个实体,因此您需要一个持久化人员来执行此操作。 和你在一起的人

Person person = em.find(Person.class,id);
使用执行更新或删除查询

query.executeUpdate();

实体管理器的remove方法希望您将实体作为参数而不是查询传递。这几乎就是您收到的错误消息。您需要删除Person而不是TypedQuery。
query.executeUpdate();