有谁知道如何每个子类的集合同一层级映射到一个所属的类,使用JPA 2.0注解,由Hibernate 4.0.0.Final支持?
有点令人费解,所以这里是一个例子。 层次结构类看起来是这样的:
@Entity
@Cacheable(true)
@Table(name = "hierarcicals")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "class", discriminatorType = DiscriminatorType.STRING)
public abstract class MySuperClass {
...
@Entity
@DiscriminatorValue("SubClassOne")
public class SubClassOne extends MySuperClass {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner")
private Owner owner;
@Entity
@DiscriminatorValue("SubClassTwo")
public class SubClassTwo extends MySuperClass {
...
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner")
private Owner owner;
这一切都看起来很好,当我坚持的对象,我可以看到他们进入与正确的鉴别数据库,以及权利人。
这里是我的“所属”类 - 没有什么特别的注释:
@Entity
@Cacheable(true)
@Table(name = "owner")
public class Owner {
...
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY)
private List<SubClassOne> subClassOnes;
@OneToMany(mappedBy = "owner", fetch = FetchType.LAZY)
private List<SubClassTwo> subClassTwos;
...
2.列表,收藏品有干将。 当我打电话getSubClassOnes(),我得到所有相关实体的袋子回来,类型SubClassOne,甚至包括那些在数据库中SubClassTwo鉴别。 当我打电话getSubClassTwos(),我得到什么似乎是SubClassTwos的袋子,但是,当我遍历在运行时集合,炸毁
org.hibernate.WrongClassException:对象ID为:gM4pnnoRge4Odx4lUTZNMQ不是指定的子类:my.package.SubClassTwo(装载的对象是错误的类的类my.package.SubClassOne的)在org.hibernate.loader.Loader.instanceAlreadyLoaded(装载机。的java:1420)[休眠核-4.0.0.Final.jar:4.0.0.Final]在org.hibernate.loader.Loader.getRow(Loader.java:1373)[hibernate-core-4.0.0.Final的.jar:4.0.0.Final]在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:640)[冬眠核-4.0.0.Final.jar:4.0.0.Final]在org.hibernate作为。 loader.Loader.doQuery(Loader.java:856)[休眠核-4.0.0.Final.jar:4.0.0.Final]在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)[休眠-core-4.0.0.Final.jar:4.0.0.Fin在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)[冬眠核-4.0.0.Final.jar:4.0.0。翅片在org.hibernate.loader.Loader.loadCollection(Loader.java:2175)[冬眠核-4.0.0.Final.jar:4.0.0.Final]在有机 .hibernate.loader.collection.CollectionLoader.initialize(CollectionLoader.java:61)[冬眠核-4.0.0.Final.jar:4.0.0.F在org.hibernate.persister.collection.AbstractCollectionPersister.initialize(AbstractCollectionPersister。的java:622)[休眠 - 共在org.hibernate.event.internal.DefaultInitializeCollectionEventListener.onInitializeCollection(DefaultInitializeCollectionEvent在org.hibernate.internal.SessionImpl.initializeCollection(SessionImpl.java:1606)[hibernate-core-4.0.0.Final。罐子:4.0.0.Final]在org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:379)[冬眠-C在org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:112) [冬眠芯-4。 在org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:266)[冬眠核-4.0.0.Final.jar:4.0.0.Final]
我想发生的是,getSubClassOnes()返回一个包含与类SubClassOnes所有者相关联的一个集合,getSubClassTwos()返回有关SubClassTwos的集合。 有谁知道我能做到这一点?