首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate Polymorphism.EXPLICIT注释不工作吗?

Hibernate Polymorphism.EXPLICIT注释不工作吗?
EN

Stack Overflow用户
提问于 2013-06-24 14:06:27
回答 1查看 6.6K关注 0票数 6

我知道有一些关于这方面的帖子,但他们大约有一年,没有回应。实际上,我们使用的是Hibernate 4.2.1,在PostgreSQL 8.4上完成。我们有两个这样的派对

实体A(顶层类)

代码语言:javascript
复制
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Polymorphism(type = PolymorphismType.EXPLICIT)
public class A {
    @Id
    @GeneratedValue
    private Long id;

    public A() {

    }

    public A(Long id) {
        super();
        this.id = id;
    }

    // Setters, getteres, hashCode and equals
}

实体B(子类)

代码语言:javascript
复制
@Entity
public class B extends A{
    String value;

    public B(){

    }

    public B(String value) {
        super();
        this.value = value;
    }

    public B(Long id, String value) {
        super(id);
        this.value = value;
    }

    // Setters, getteres, hashCode and equals
}

如您所见,实体被注释为PolymorphismType.EXPLICIT,但是当获取顶级类时

代码语言:javascript
复制
ArrayList<A> lista = (ArrayList<A>) session.createCriteria(A.class).list();

我们也使用String value属性获得B子类。实际上,SQL语句包含left outer join B。这是Hibernate的第四个版本中的一个bug,还是我做错了什么?

诚挚的问候

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-24 14:47:42

在我看来,相关的文档和特性本身是非常令人困惑的。来自第五章

显式多态意味着类实例只能通过显式命名该类的查询返回。

这将向我表明你的查询应该有效。但你试图做的似乎不是他们的意图,正如你在同一段后面所看到的那样:

当两个不同的类映射到同一个表时,显式多态性非常有用,这允许一个包含表列子集的“轻量级”类。

他们在这里谈论的是让BA映射到同一个表,但是没有实际的类关系。您可以在旧的JIRA机票中看到这种观点的重复。我猜这意味着,如果他们没有类关系,但在同一个表中,那么您可以使用IMPLICIT多态性来获得这两个查询,但这似乎完全奇怪,因为他们没有共享一个Java子类。

因此,总结是PolymorphismType.EXPLICIT没有做您认为它所做的事情。在我看来,它应该做你期望的事情,根据上面的第一条报价。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17277500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档