7

我最近试图为我的一些休眠映射实体引入接口,但不知道如何配置映射。

当我在没有任何进一步声明的情况下使用接口时,我总是得到以下异常:

org.hibernate.MappingException: Could not determine type for: ...MyInterface 

然后我发现一切正常,当我明确定义 targetEntity 时:

   @OneToOne(targetEntity=InterfaceImpl.class)
   private MyInterface myInterface;

不幸的是,这个解决方案在我的情况下不起作用:我无法通过注释定义 targetEntity,因为我想将这个类提取到一个不包含甚至不知道接口的最终实现的公共外部库中。

那么有没有另一种方法来声明应该使用哪个实现,我可以在提取的库之外使用?在此处输入图像描述

4

2 回答 2

1

在抽象中定义您的映射契约,@MappedSupperclass 然后@AssociationOverride在实现类中覆盖它。

于 2013-03-11T12:53:13.697 回答
1

我不确定带有休眠注释的事情是如何工作的,但我做了类似的描述here

请参阅上一篇文章以获得非常详尽的解释。

从某种意义上说,基本需求是相似的,我们在休眠映射文件中指定了接口,并且实现是主要在运行时使用 javassist 创建的类(它们是不存在的编译时)。

您需要的是可以在运行时从接口解析实现类的代码,反之亦然,并使用 hibernate tuplizer/instantiator 契约作为扩展点以允许休眠

(a) 当它需要从 DB 填充实体时创建实现实例,并且 (b) 当它需要将实体(实现实例)存储到 DB 时定位休眠映射元数据。

于 2013-03-11T14:37:22.913 回答