gpt4 book ai didi

Hibernate Polymorphism.EXPLICIT 注释不起作用?

转载 作者:行者123 更新时间:2023-12-03 06:52:30 26 4
gpt4 key购买 nike

我知道有一些关于此的帖子,但大约一年了,没有回复。实际上我们使用的是 Hibernate 4.2.1.Final 而不是 PostgreSQL 8.4。我们有两个这样的实体

实体 A(顶级层次结构类)

@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(子类)

@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 进行注释,但在使用

获取顶级类时
ArrayList<A> lista = (ArrayList<A>) session.createCriteria(A.class).list();

我们也通过 String value 属性获取 B 子类。事实上,该 SQL 语句包含左外连接 B。这仍然是 Hibernate 第四版中的错误还是我做错了什么?

致以诚挚的问候

最佳答案

在我看来,相关文档和功能本身非常困惑。来自 Chapter 5 :

Explicit polymorphisms means that class instances will be returned only by queries that explicitly name that class.

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

Explicit polymorphisms is useful when two different classes are mapped to the same table This allows a "lightweight" class that contains a subset of the table columns.

他们在这里讨论的是让 BA 映射到同一个表,但没有实际的类关系。您可以在旧的 JIRA ticket 中看到重复的观点。 。我想这意味着如果它们没有类关系,但位于同一个表中,那么您可以使用IMPLICIT多态性通过相同的查询获得两者,但这似乎完全奇怪,因为它们不要共享 Java 子类。

所以,总结是,PolymorphismType.EXPLICIT 并没有像你想象的那样做。在我看来,根据上面的第一句话,它应该达到您的预期。

关于Hibernate Polymorphism.EXPLICIT 注释不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17277500/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com