有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

以泛型作为实体类型的java Spring数据存储库

我想在我的项目中使用Spring数据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;
    ...
    }
    

@Entity
@Table(name = "butter")
public class Butter extends AbstractBaseEntity {
@Column
String weight;
...
}
  1. 我希望任何人创建的任何存储库都只与扩展AbstractBaseEntity的实体一起工作。所以我想这样做:

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

然后定义两种常用方法,然后按如下方式使用:

public interface BreadRepository <Bread, Long> extends MyBaseRepository

或者

public interface ButterRepository extends MyBaseRepository

问题是我不能这么做。 当我定义MyBaseRepository时,如果我使用:

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

我在运行real query时出现了一个错误,即“实体没有属性类型”。 如果我用

extends JpaRepository

我得到一个错误,对象没有映射。 如果我尝试

JpaRepository<T extends AbstractBaseEntity , Long>

它只是由于意外的绑定错误而失败

我是否错过了任何东西,或是Spring Data JPA无法实现

谢谢


共 (0) 个答案