Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate接口映射,不使用注释参数;“目标实体”;_Java_Hibernate_Jpa_Jpa 2.0 - Fatal编程技术网

Java Hibernate接口映射,不使用注释参数;“目标实体”;

Java Hibernate接口映射,不使用注释参数;“目标实体”;,java,hibernate,jpa,jpa-2.0,Java,Hibernate,Jpa,Jpa 2.0,我最近试图为一些hibernate映射的实体引入接口,但不知道如何配置映射 当我在没有任何进一步声明的情况下使用接口时,我总是遇到以下异常: org.hibernate.MappingException: Could not determine type for: ...MyInterface 然后,当我明确定义targetEntity时,我发现一切正常: @OneToOne(targetEntity=InterfaceImpl.class) private MyInterfac

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

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

org.hibernate.MappingException: Could not determine type for: ...MyInterface 
然后,当我明确定义targetEntity时,我发现一切正常:

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


那么,有没有其他方法来声明应该使用哪个实现,我可以在提取的库之外使用

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

我不确定hibernate注释的工作原理,但我做了类似的描述

请参阅上一篇文章,以获得相当透彻的解释

基本需求与此类似,我们在hibernate映射文件中指定了接口,实现主要是在运行时使用javassist创建的类(它们是不存在的编译时)

您需要的是能够在运行时从接口解析实现类的代码,反之亦然,并使用hibernate tuplizer/实例化器契约作为扩展点来允许hibernate

(a) 当需要从数据库和数据库填充实体时,创建实现实例
(b) 当hibernate映射元数据需要将实体(实现实例)存储到数据库时,可以找到它。

从技术上讲,这是个好主意。不幸的是,我真的需要接口。抽象超类不会起作用,因为我需要多重继承才能使它们满足我的需要。用户(参见上面的示例)应该能够实现多个接口。例如,他既是博客文章的作者,也是评论的作者。我上面没有提到这一点。很抱歉