小编sev*_*LiP的帖子

当映射到具有子类的抽象@Entity时,JPA @OneToOne抛出Error

当一个Entity映射到另一个在其子类上有直接实现的Entity时,我遇到了问题.请参阅以下示例映射:

@Entity
class Location {
      @OneToOne
      @JoinColumn(...)
      private Person person;
}

@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="person_type",discriminatorType=DiscriminatorType.STRING)
abstract class Person {
}

@Entity
@DiscriminatorValue("M")
class Man extends Person {
    ...
}

@Entity
@DiscriminatorValue("W")
class Woman extends Person {
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,这就是我在数据库表上的内容:

location-table:id = 1,person_id = 1 person-table:id = 1,person_type ="M"

当我使用实体管理器检索位置时,hibernate会抛出一个异常,说我无法实例化抽象类或接口.

Location location = entityManager.find(Location.class, 1L);
Run Code Online (Sandbox Code Playgroud)

Hibernate抛出此错误:

javax.persistence.PersistenceException: org.hibernate.InstantiationException: Cannot instantiate abstract class or interface: Person
at org.hibernate.ejb.AbstractEntityManagerImpl.throwPersistenceException(AbstractEntityManagerImpl.java:630)
at org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:195)
at ......
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa one-to-one entitymanager

11
推荐指数
1
解决办法
7041
查看次数

标签 统计

entitymanager ×1

hibernate ×1

java ×1

jpa ×1

one-to-one ×1