相关疑难解决方法(0)

使用抽象超类作为Spring数据存储库的参数

我知道spring数据存储库的实现:

创建一个这样的界面:

public interface CountryRepository extends CrudRepository<Country, Long> {}
Run Code Online (Sandbox Code Playgroud)

现在Country是一个AbstractCatalog,我在矿山项目中有很多(很多)目录.
我想知道我是否可以创建一个适用于所有目录的存储库:

public interface AbstractCatalogRepository extends CrudRepository<AbstractCatalog, Long> {}
Run Code Online (Sandbox Code Playgroud)

现在有了保存,我没有直接看到一个问题,但如果我想搜索一个AbstractCatalog我已经确定我会碰壁,因为回购将不知道他必须选择什么对象.

AbstractCatalog.class

@MappedSuperclass
public abstract class AbstractCatalog extends PersistentEntity {

    /**
     * The Constant serialVersionUID.
     */
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id;
    /**
     * The code.
     */
    @Column(unique = true, nullable = false, updatable = false)
    private String code;
    /**
     * The description.
     */
    @Column(nullable = false)
    private …
Run Code Online (Sandbox Code Playgroud)

java spring jpa spring-data-jpa

20
推荐指数
2
解决办法
3万
查看次数

Spring Data JPA:创建一个抽象存储库

鉴于以下课程:

@MappedSuperclass
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name="animalType",discriminatorType=DiscriminatorType.STRING)
@QueryExclude
public abstract class Animal  {}

@Entity
@DiscriminatorValue("dog")
public class Dog {}

@Entity
@DiscriminatorValue("cat")
public class Cat {}
Run Code Online (Sandbox Code Playgroud)

有可能以某种方式配置JPA存储库Animal吗?

我试过了

public interface AnimalRepository extends JpaRepository<Animal,Long>
Run Code Online (Sandbox Code Playgroud)

然而,这失败了:

java.lang.IllegalArgumentException:不是托管类型:Animal

有没有办法配置这个?

我希望能够执行以下任务:

@Autowired
private AnimalRepository repository;

public void doSomething()
{
    Animal animal = repository.findById(123);
    animal.speak();
}
Run Code Online (Sandbox Code Playgroud)

java spring spring-data spring-data-jpa

13
推荐指数
3
解决办法
2万
查看次数

标签 统计

java ×2

spring ×2

spring-data-jpa ×2

jpa ×1

spring-data ×1