jpa 使用Hibernate从JEE javax迁移到Jakarta EE时出现ClassCastException问题

qltillow  于 5个月前  发布在  Java
关注(0)|答案(1)|浏览(56)

你能帮我纠正这个功能吗?自从我从jee javax迁移到jakartaee后,我一直有异常。它在jee上工作得很好,但在JakartaEE上就不行了
public <T extends GenericInputTimesheet> List<T> findWhereItemToto(Class<T> entityClass, Integer value
下面是我简化的Jakarta JPA数据模型(为了可读性,我没有在这里包含getter/setter)

@MappedSuperclass
public abstract class GenericInputTimesheet<T extends GenericTimesheetItem> implements Serializable {

    @Id
    private long id;
    @NotNull
    @ManyToOne
    private T item;
}

@MappedSuperclass
public class GenericTimesheetItem implements Serializable {

    @Id
    private long id;
    private Integer toto;
}

@Entity
public class InputTimesheetMandat extends GenericInputTimesheet<Mandat> {

}

@Entity
public class Mandat extends GenericTimesheetItem {

}

字符串
那么我有这个功能

public <T extends GenericInputTimesheet> List<T> findWhereItemToto(Class<T> entityClass, Integer value) {
    return entityManager.createQuery("Select e From " + entityClass.getSimpleName() + " e Where e.item.toto=:toto", entityClass)
            .setParameter("toto", value)
            .getResultList();
}


我的启动器:

public void displayToto(Integer value) {
    try {
        List<InputTimesheetMandat> inputs = pocService.findWhereItemToto(InputTimesheetMandat.class, value);
        System.out.println(inputs.size() + " InputTimesheetMandat Toto = " + value + " founds");
    } catch (Exception e) {
        System.err.println(e.getMessage());
    }
}


我发现了这个例外:
java.lang.ClassCastException:class org.hibernate.metamodel.model.domain.internal.MappedSuperclassTypeImpl无法强制转换为class org.hibernate. metamodel.model. domain.MappedSuperclassTypeImpl和org.hibernate. metamodel.model.domain.internal.MappedSuperclassTypeImpl位于加载程序“email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)”的未命名模块中@304f8087)

mzmfm0qo

mzmfm0qo1#

我来解决问题

@MappedSuperclass
public abstract class GenericInputTimesheet<T extends GenericTimesheetItem> implements Serializable {

    @Id
    private long id;

    public abstract T getItem();

    public abstract void setItem(T genericTimesheetItem);
}

@MappedSuperclass
public class GenericTimesheetItem implements Serializable {

    @Id
    private long id;
    private Integer toto;
}

@Entity
public class InputTimesheetMandat extends GenericInputTimesheet<Mandat> {

    @NotNull
    @ManyToOne
    private Mandat item;

    @Override
    public Mandat getItem() {
        return item;
    }

    @Override
    public void setItem(Mandat item) {
        this.item = item;
    }

}

@Entity
public class Mandat extends GenericTimesheetItem {

}

//Work well Now
public <T extends GenericInputTimesheet> List<T> findWhereItemToto(Class<T> entityClass, Integer toto) {
    return entityManager.createQuery("Select e From " + entityClass.getSimpleName() + " e Where e.item.toto=:toto", entityClass)
            .setParameter("toto", toto)
            .getResultList();
}

字符串

相关问题