Gus*_*ava 5 java hibernate jpa class-hierarchy
我有一个场景如下:
@Entity
@Table(name = "ANIMAL")
@Inheritance(strategy = InheritanceType.JOINED)
public class Animal implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "S_ANIMAL")
@SequenceGenerator(name = "S_ANIMAL", sequenceName = "S_ANIMAL", allocationSize = 1)
public int getNumero() {
return numero;
}
public void setNumero(int numero) {
this.numero = numero;
}
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
并作为子类:
@Entity
@Table(name = "DOG")
public class Dog extends Animal {
private static final long serialVersionUID = -7341592543130659641L;
.
.
.
}
Run Code Online (Sandbox Code Playgroud)
我有一个像这样的 JPA Select 语句:
SELECT a FROM Animal a;
Run Code Online (Sandbox Code Playgroud)
我正在使用休眠 3.3.1
正如我所看到的,框架检索使用左外连接的Animal实例Dog。
有没有办法只选择“部分” Animal?我的意思是,前一个Select将得到所有Animals,那些只有Animals 但不是Dogs 的以及那些是Dogs 的。
我想要它们全部,但在 s 的情况下,Dog我只想检索它们的“动物部分”。
我找到了,@org.hibernate.annotations.Entity(polymorphism = PolymorphismType.EXPLICIT)
但据我所知,只有当 Animal 不是@Entity.
多谢。
简短回答:您描述的行为符合 JPA 标准。没有 JPA 标准方法来限制 JPA 提供程序仅检索超类。
提供者可以选择查询实现逻辑来实现功能、一致性和性能。只要它尊重您的实体注释并在查询中返回所请求的信息,一切都很好。将 Dog 的外部连接视为私有实现细节,您不应该关心它。提供者已编写了外部联接的代码以提高性能和一致性。
考虑:
| 归档时间: |
|
| 查看次数: |
4697 次 |
| 最近记录: |