Spring Data Repository JPA实体继承问题:无法实例化抽象类或接口

时间:2013-12-10 06:00:07

标签: java spring hibernate jpa spring-data

我正在使用下面的网络应用程序堆栈,当我运行我的TestNG测试并且容器被初始化时,我的测试类无法使用以下异常自动装配ExampleRepository。关于如何映射这种关系的任何想法?当我使用相同的Web应用程序启动jetty Web服务器时,我没有获得任何启动异常,因此它可能是AbstractTransactionalTestNGSpringContextTests的问题。

堆栈:

    Spring - 3.2.2.RELEASE
    Spring Data - 1.3.0.RELEASE
    Hibernate - 3.6.10.Final
    TestNG - 6.1.1

例外:

Cannot instantiate abstract class or interface: com.test.Example; nested exception is org.hibernate.InstantiationException

JPA实体:

@Entity
@Table(name = "EXAMPLE")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public abstract class Example {}


@Entity
@DiscriminatorValue("examplea")
public class ExampleA extends Example {}

@Entity
@DiscriminatorValue("exampleb")
public class ExampleB extends Example {}

存储库:

public interface ExampleRepository extends JpaRepository<Example, Long> {}

TestNG课程:

public class ExampleTest extends AbstractTransactionalTestNGSpringContextTests{
      @Autowired
      private ExampleRepository exampleRepository;
}

1 个答案:

答案 0 :(得分:1)

将Example类设为Interface,让其他类实现它。 正如异常明确指出的那样,你无法实例化一个抽象类。 将Example类作为接口可以实例化其类型,即实现它的类。