Spring数据库,使用泛型作为实体类型

时间:2014-09-17 07:24:37

标签: java spring jpa spring-data spring-data-jpa

我想在我的项目中使用Spring Data JPA存储库。通常我会创建自己的存储库,让我们说

interface ProductRepository extends JPARepository<Product, Long>

但是,我想提供一个更复杂的案例,符合以下条件:

  1. 我有一个具有共同定义的基本实体:

    @MappedSuperclass
    public abstract class AbstractBaseEntity {
        @GeneratedValue(strategy = GenerationType.AUTO)
        @Id
        @Column(name = "ID", nullable = false)
        private Long id;
        ...
    }
    
  2. 我有所有其他实体扩展上述实体,例如:

    @Entity
    @Table(name = "bread")
    public class Bread extends AbstractBaseEntity {
    @Column
    String type;
    ...
    }
    
  3. @Entity
    @Table(name = "butter")
    public class Butter extends AbstractBaseEntity {
    @Column
    String weight;
    ...
    }
    
    1. 我希望任何人创建的任何存储库只能用于扩展AbstractBaseEntity的实体。所以我想做这样的事情:
    2.   

      public interface MyBaseRepository<T> extends JpaRepository<T extends AbstractBaseEntity, Long>

      然后定义几个常用方法,然后按如下方式使用它:

        

      public interface BreadRepository <Bread, Long> extends MyBaseRepository

        

      public interface ButterRepository扩展了MyBaseRepository

      问题在于我无法做到这一点。 当我定义MyBaseRepository时,如果我使用:

        

      MyBaseRepository<T extends AbstractBaseEntity> extends JpaRepository<T, Long>

      我有一个错误,&#34;实体没有属性类型&#34;当我运行真正的查询。 如果我只使用

        

      扩展JpaRepository

      我收到一个错误,即没有映射Object。 如果我尝试

        

      JpaRepository<T extends AbstractBaseEntity , Long>

      它只是因意外的绑定错误而失败。

      我是否遗漏了任何内容,或者只是不能使用Spring Data JPA?

      谢谢!

0 个答案:

没有答案