我有一个基本抽象类。
@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/