java - spring数据中的多态查询

标签 java inheritance spring-data spring-data-jpa

我有一个基本抽象类。

@Entity
@Table(name = "P_FLD")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "FLD_DISCRIMINATOR", columnDefinition = "CHAR(3)")
abstract public class AbstractPassbookField

和一些扩展它的类。例如:

@Entity
@DiscriminatorValue("F")
@Table(name = "P_FLD_F")
public class PassbookFileField extends AbstractPassbookField

我为基本实体创建存储库

public interface PassbookRepository extends CrudRepository<AbstractPassbookField, Long>

我正在运行下一个测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:test-config.xml")
public class PassbookFieldRepositoryTest {

    @Autowired
    PassbookRepository passbookRepository;

    @PersistenceContext
    private EntityManager em;

    @Test
    public void testSave() {
        PassbookFileField passbookFileField = new PassbookFileField();
        passbookFileField.setFilename("text.test");
        passbookFileField.setTemplate(true);
        passbookFileField.setReadonly(true);
        passbookFileField.setImageType(ImageType.I);
        passbookFileField.setResoltuionType(ImageResolutionType.N);

        passbookFileField = passbookRepository.save(passbookFileField);

        passbookRepository.findAll();
    }
}

passbookRepository.save(passbookFileField) - 工作正常,但是 passbookRepository.findAll() 给我一个异常(exception)

org.springframework.orm.hibernate3.HibernateObjectRetrievalFailureException: Object [id=1] was not of the specified subclass [ru.teamlabs.moneybox.commons.model.passbook.field.AbstractPassbookField] : Discriminator: F ; nested exception is org.hibernate.WrongClassException: Object [id=1] was not of the specified subclass [ru.teamlabs.moneybox.commons.model.passbook.field.AbstractPassbookField] : Discriminator: F 

通过 entityManager 查询给了我同样的错误。我做错了什么?

最佳答案

您还没有为父类(super class)提供 DiscriminatorValue 值,因此在检索它时无法区分父类(super class)和子类。尝试以下操作,它一定有效。

@Entity
@Table(name = "P_FLD")
@DiscriminatorValue("SF")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "FLD_DISCRIMINATOR", columnDefinition = "CHAR(3)")
abstract public class AbstractPassbookField

关于java - spring数据中的多态查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24692429/

相关文章:

c++ - 基方法被调用而不是派生方法

java - 如何在另一个类的方法中使用一个类的字段名称,这样如果名称更改就会出现编译器问题

java - 警报对话框之后的警报对话框

java - 从 JBOSS EJB 服务中调用 Web 服务时出现问题

具有继承性的 Python 循环导入

c++ - 尝试在 C++ 中减少设计模式

java - 使用 Spring Data Repository 向 mongo JSON @Query 添加排序

spring - 系统属性移至 application.properties 后停止生效

java - 打印命令行执行结果

java - Spring 为未定义的 bean 抛出异常