Spring Data JPA :创建抽象存储库

2022-09-04 02:29:23

给定以下类:

@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 {}

是否可以以某种方式为 配置 JPA 存储库?Animal

我试过了

public interface AnimalRepository extends JpaRepository<Animal,Long>

但是,这失败了,

java.lang.IllegalArgumentException: Not a managed type: Animal

有没有办法配置它?

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

@Autowired
private AnimalRepository repository;

public void doSomething()
{
    Animal animal = repository.findById(123);
    animal.speak();
}

答案 1

我有类似的错误。我通过将实体类的映射添加到持久性.xml文件来解决它。

因此,也许可以在您的持久性中添加类似的东西.xml:

<persistence-unit>
...   
<class>yourpackage.Animal</class>
...
</persistence-unit>

答案 2

我遇到了这个确切的问题,我找到了解决方案:您需要使用OR,而不是同时使用OR。像这样注释你的类:@MappedSuperclass@InheritanceAnimal

@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public abstract class Animal  {}

基础数据库方案将保持不变,现在您的泛型应该可以工作了。持久性提供程序将执行自检,并找出要用于实际子类型的表。AnimalRepository


推荐