ClassCastException при использовании find () для javax.persistence.EntityManager - PullRequest
0 голосов
/ 16 октября 2019

При попытке извлечь сущность из базы данных, используя JPA EntityManager, я получаю исключение ClassCastException, которое ссылается на два идентичных класса. После прочтения других постов / статей, я подозреваю, что виновником может быть приложение, использующее 2 разных загрузчика классов одного типа. К сожалению, я не знаю, как это проверить или исправить. Может ли кто-нибудь помочь пролить свет на эту ситуацию и ее решение?

Сущность Member.java

package com.example.mysql_flyway_database.entities;

import javax.persistence.*;

@Entity
@Table(name = "_member_")
public class Member {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer memberId;

    @Column(name = "member_name")
    private String memberName;

    public Integer getMemberId() {
        return memberId;
    }

    ... // other getter/setter methods

}

persistence.xml - хранится в / resources / META-INF / , на случай, если это имеет значение

<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
             version="2.0" xmlns="http://java.sun.com/xml/ns/persistence">
    <persistence-unit name="Member" transaction-type="RESOURCE_LOCAL">
        <class>com.example.mysql_flyway_database.entities.Member</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url"
                      value="jdbc:mysql://localhost:3306/JDND_C3"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="Keep1Moving2Forward3!"/>
        </properties>


    </persistence-unit>
</persistence>

MyApplication


...

private static void readMembersAsEntities(EntityManagerFactory factory) {
    EntityManager manager = factory.createEntityManager();
    manager.getTransaction().begin();

    Member member = manager.find(Member.class, 1);
    System.out.println(String.format("Member %s was found", member.getMemberName()));
}

...

Вот журнал:

Exception in thread "restartedMain" java.lang.reflect.InvocationTargetException
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:564)
    at org.springframework.boot.devtools.restart.RestartLauncher.run(RestartLauncher.java:49)
Caused by: java.lang.ClassCastException: com.example.mysql_flyway_database.entities.Member cannot be cast to com.example.mysql_flyway_database.entities.Member
    at com.example.mysql_flyway_database.MysqlFlywayDatabaseApplication.readMembersAsEntities(MysqlFlywayDatabaseApplication.java:51)
    at com.example.mysql_flyway_database.MysqlFlywayDatabaseApplication.main(MysqlFlywayDatabaseApplication.java:42)
    ... 5 more

Примечание: Это очень похоже на подчеркнутую здесь проблему:

Проблема загрузки класса JPA с Hibernate .

Раскрытие информации: я довольно новичок в Spring и его плагинах / зависимостях (в настоящее время изучаю), поэтому я немного растерялся из-за предоставленного решения, описанного в упомянутом посте. Относительно решения, упомянутого в предоставленном посте: В моем проекте я не вижу /WEB-INF/lib.

Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...