- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Java 反射的新手。
我查了很多论坛,但我还没有找到可行的解决方案。
错误:
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
当我试图从数据库中获取对象时出现:
new Unit().getBy(3L);
方法声明
@MappedSuperclass
public abstract class Generic<T extends Generic> {
@Transient
public Class<T> entityClass;
Generic() {
entityClass = ((Class) ((Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]));
}
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
public Long id;
public T getBy(Long id) {
return JPA.em().find(entityClass, id);
}
二级扩展
@MappedSuperclass
public abstract class GenericDictionary<T extends Generic<T>> extends Generic<T> {
@Required
public String name;
@Required
public boolean active = true;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public boolean getActive() {
return active;
}
public void setActive(boolean stat) {
this.active = stat;
}
实体类:
@Entity
@Table(name="common__Unit")
public class Unit extends GenericDictionary<Unit> {
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="parent_id")
public Unit parent;
}
Controller 中的方法调用:
new Unit().getBy(3L);
这很奇怪,因为我有其他实体,我可以在其中使用该方法而不会出现像这样的任何运行时错误。这是那个实体:
@Entity
@Table(name="common__Clinic")
public class Clinic extends GenericDictionary<Clinic> {
@ManyToMany(cascade = CascadeType.PERSIST)
public List<Unit> unit;
以及其他 Controller 中的方法调用:
Clinic clinic = new Clinic().getBy(3L);
此代码有效。我看不出该模型和 Controller 之间有任何区别。
谁能帮我指出这里的错误?
---------------------------------------- 编辑 ------ --------------------------------
完整堆栈跟踪
[error] play - Cannot invoke the action, eventually got an error: javax.persistence.PersistenceException: org.hibernate.HibernateException: Javassist Enhancement failed: models.Unit
[error] application -
! @6kb72hhpo - Internal server error, for (POST) [/SupraADMIN/oddzialy/zapisz] ->
play.api.Application$$anon$1: Execution exception[[PersistenceException: org.hibernate.HibernateException: Javassist Enhancement failed: models.Unit]]
at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10-2.2.4.jar:2.2.4]
at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10-2.2.4.jar:2.2.4]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10-2.2.4.jar:2.2.4]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:264) [play_2.10-2.2.4.jar:2.2.4]
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$3.applyOrElse(PlayDefaultUpstreamHandler.scala:264) [play_2.10-2.2.4.jar:2.2.4]
Caused by: javax.persistence.PersistenceException: org.hibernate.HibernateException: Javassist Enhancement failed: models.Unit
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:838) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:781) ~[hibernate-entitymanager-4.2.0.CR1.jar:4.2.0.CR1]
at models.Generic.getBy(Generic.java:62) ~[na:na]
at controllers.admin.CMS.UnitsSubmit(CMS.java:477) ~[na:na]
at admin.Routes$$anonfun$routes$1$$anonfun$applyOrElse$13$$anonfun$apply$13.apply(routes_routing.scala:317) ~[na:na]
Caused by: org.hibernate.HibernateException: Javassist Enhancement failed: models.Unit
at org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.getProxy(JavassistLazyInitializer.java:143) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.proxy.pojo.javassist.JavassistProxyFactory.getProxy(JavassistProxyFactory.java:73) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.tuple.entity.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:758) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.persister.entity.AbstractEntityPersister.createProxy(AbstractEntityPersister.java:4396) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.event.internal.DefaultLoadEventListener.createProxyIfNecessary(DefaultLoadEventListener.java:332) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:258) ~[hibernate-core-4.2.0.CR1.jar:4.2.0.CR1]
Caused by: java.lang.ClassCastException: java.lang.Class cannot be cast to java.lang.reflect.ParameterizedType
at models.Generic.<init>(Generic.java:40) ~[na:na]
at models.GenericDictionary.<init>(GenericDictionary.java:13) ~[na:na]
at models.Unit.<init>(Unit.java:30) ~[na:na]
at models.Unit_$$_jvst57e_b5.<init>(Unit_$$_jvst57e_b5.java) ~[na:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_65]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_65]
[error] application - REGUEST: POST /SupraADMIN/oddzialy/zapisz GENERATED ERROR: @6kb72hhpo: Execution exception in /home/user/Aplikacje/Eclipse/SVP/modules/common/app/models/Generic.java:62
最佳答案
这是解决问题的通用模型的构造函数:
@MappedSuperclass
public abstract class Generic<T extends Generic> {
@Transient protected Class<T> entityClass;
public Generic() {
Class obtainedClass = getClass();
Type genericSuperclass = null;
for(;;) {
genericSuperclass = obtainedClass.getGenericSuperclass();
if(genericSuperclass instanceof ParameterizedType) {
break;
}
obtainedClass = obtainedClass.getSuperclass();
}
ParameterizedType genericSuperclass_ = (ParameterizedType) genericSuperclass;
entityClass = ((Class) ((Class) genericSuperclass_.getActualTypeArguments()[0]));
}
关于java - Caused by : java. lang.ClassCastException : java. lang.Class无法转换为java.lang.reflect.ParameterizedType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27167225/
给出下面的代码片段,对于 POJO 类的每个字段,有没有办法检查类型是否是整数列表?这里真正的问题是类型参数,因为通过 instanceof 或 isAssignableFrom 很容易检查它是否是一
public class FrontUtil { public List> tableGen(List> theads, List tbodys){ List> frontLi
我无法完全理解反射的工作原理,因此在尝试为我的 GsonBuilder 注册自定义类型适配器时遇到了一些麻烦。 . 我需要为 List 注册类型适配器类型。 这是一个工作代码: gsonBui
考虑这个类结构。 class Class1 { Class2 field1; } 如果我有一个 ParameterizedType代表 Class1 的实例通过反射,我如何获取/创建 Para
我正在从 Field.getGenericType() 中检索一个 ParameterizedType 对象,我想创建该类型的一个实例。例如,此类型可能代表一个 HashMap。 我想也许我可以将它转
阅读 ParameterizedType 的文档后interface 我认为 ParameterizedType 实例的示例可以是任何参数化类型,例如我代码中的 col: public class
我尝试这个通用代码是因为我不想为数据库中的每个实体都创建一个 Dao 类,因为我有 80 个专门用于那些我将只执行 CRUD 查询的人。因为在大多数情况下,我只需要坚持或通过 id 进行查找。 pub
有用的是,scala 的 Universe.typeOf 保留了类的类型参数。 import scala.reflect.runtime.universe._ case class X[T:TypeT
由于错误,给定的断言将失败 Failed to find the generated JsonAdapter constructor for class GenericType 如何从具体化的类型中获
我有以下代码。在运行时 typeClassz 是 java.util.Set。但是 typeClassz instanceof ParameterizedType 的计算结果为 false。对于 ja
我正在尝试实现这样的模型结构: Generic (abstract) TplInsurance (extends Generic) TplInsuranceDoctor (nested class i
假设我有一个Type a这是 java.util.TreeSet ,已通过泛型参数化,由于类型删除,我们看不到。我们还有一个Type b ,这是一个“java.lang.Integer”。如何构建 P
如果我有一个无法更改的接口(interface)和类,看起来像这样: public interface ISport { String getName(); List ge
我想使用新的 JPA 2.1 功能来创建自定义通用枚举转换器。但在部署时我收到此错误:Caused by: org.hibernate.AssertionFailure: Could not extr
目前 VariableService 在我的 Controller 中是 @Autowired。 我知道我可以实现类 ParameterizedType 来消除这个错误,但我担心我可能会走错方向。有没
我有一个简单的静态方法: public static U findStuff(String id) { // how can i get the class of type U here ?
我已经在 Stack 上寻找了一段时间的答案。所有的答案看起来都好像他们说我已经有了正确的答案,但我仍然在下面的构造函数的第一行收到类强制转换异常。 SEVERE: Exception while l
给定一个注入(inject)器,我想知道如何检索某个参数化类型的特定实例(但我没有 Type 本身)。让我解释一下: 假设您进行了以下绑定(bind): List绑定(bind)到 ArrayList
调用 java.lang.reflect.Type.toString() 提供了非常好的通用类型表示: @Test public void typeToStringWithTypeToken() {
我被这个问题困扰了很长时间。我搜索了这个问题一段时间,但没有一个解决方案有效。 结构: public interface GenericDAO @Repository public class Abs
我是一名优秀的程序员,十分优秀!