Java Hibernate接口映射,不使用注释参数;“目标实体”;
我最近试图为一些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
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映射元数据需要将实体(实现实例)存储到数据库时,可以找到它。从技术上讲,这是个好主意。不幸的是,我真的需要接口。抽象超类不会起作用,因为我需要多重继承才能使它们满足我的需要。用户(参见上面的示例)应该能够实现多个接口。例如,他既是博客文章的作者,也是评论的作者。我上面没有提到这一点。很抱歉