今天分享一个在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 方法

SpringData JPA实现CRUD,分页与多参数排序

如何使用 SpringBoot 使用 Spring Data JPA 和 MYSQas DB 创建一个简单的 CRUD 应用程序?

(CRUD)大量JPA类的存储库

基于Spring Boot,使用JPA操作Sql Server数据库完成CRUD