今天分享一个在JPA进行CRUD的时候遇见的一个问题:父类如何获取子类传递的泛型!
Posted darryzz04
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了今天分享一个在JPA进行CRUD的时候遇见的一个问题:父类如何获取子类传递的泛型!相关的知识,希望对你有一定的参考价值。
我把Delete分享出来大家看看!
--------------------------------------------------------------------------------------------
public class IBasicDaoImpl<T> implements BasicDao<T>
//实体类class
private Class<T> entityClass = null;
//ID字段的class
//getSuperclass 返回直接继承的父类(由于编译擦除,没有显示泛型参数)
// getGenericSuperclass 返回直接继承的父类(包含泛型参数)
Type type = getClass().getGenericSuperclass();
//解决多层继承拿泛型类型 //BaseServiceImpl<User> <- UserService <- PassportService
while(!(type instanceof ParameterizedType))
type = ((Class<?>)type).getGenericSuperclass();
//为了避免写错代码出现死循环,加上这个保险。
if(type == null || "java.lang.Object".equals(type.getClass()))
break;
if(type instanceof ParameterizedType)
ParameterizedType parameterizedType = (ParameterizedType)type;
Type[] genericTypies = parameterizedType.getActualTypeArguments();
entityClass = (Class<T>)genericTypies[0];
--------------------------------------------------------------------------------------------------
public void delete(Long id)
EntityManager entityManager = JpaUtils.getEntityManager();
try
entityManager.getTransaction().begin();
//通过id去查询一个对象[持久状态的对象]
T t = entityManager.find(entityClass, id);
//删除数据[remove表示将一个持久状态的对象从表中移除]
entityManager.remove(t);
entityManager.getTransaction().commit();
catch (Exception e)
e.printStackTrace();
//事务回滚
entityManager.getTransaction().rollback();
finally
//关闭资源
JpaUtils.close(entityManager);
JpaUtils.close();
代码就是上面的代码!过这样我们就可以解决父类如何获取子类传递的泛型的问题!
以上是关于今天分享一个在JPA进行CRUD的时候遇见的一个问题:父类如何获取子类传递的泛型!的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Data JPA 的服务层中的 Crud 方法
如何使用 SpringBoot 使用 Spring Data JPA 和 MYSQas DB 创建一个简单的 CRUD 应用程序?