- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑以下场景:
(以下内容已被省略:构造函数、Getters 和 Setters、@Column 注释、@Basic 注释、@Table 注释、导入和包声明。其余部分完全按照我的意图(甚至是空注释))
@Inheritance(strategy=InheritanceType.JOINED)
@Entity
public class A {
@Id @GeneratedValue
private long id;
private String aValue;//There are getters and setters for this, but I omitted them
}
@Entity
public class B extends A {
private String bValue;
}
//Missing @Inheritance here - JPA2 says "default" @Inheritance if it is missing
//But what does that mean?
@Entity
public class C extends A {
private String cValue;
}
@Entity
public class D extends C {
private String dValue;
}
//Missing strategy, whose default, according to the annotation interface, is SINGLE_TABLE
@Inheritance
@Entity
public class E extends C {
private String eValue;
}
@Entity
public class F extends E {
private String fValue;
}
@Entity
public class G extends E {
private String gValue;
}
没有语法的类的快速摘要:
A (@Inheritance(strategy=InheritanceType.JOINED)
B, C (no annotation)
D, E (@Inheritance)
F, G
如果您要遵循 JPA 的规范,是否应该有
或者是我还没有想到的其他场景?我会测试它,但我不确定它是 JPA 的实现还是规范本身填补了“当 @Inheritance 注释未丢失但有未定义的策略时会发生什么”的空白?就我个人而言,我很确定 C 不会发生,但我不知道它是否会像 A 或 B 一样映射。
因此问题标题:@Inheritance 是否默认为“SINGLE_TABLE”(无论它是否丢失或未定义),还是默认为“fallthrough”(检查上面的实体层次结构如何处理事物),如果不可能,则为“SINGLE_TABLE”?如果注释存在,但没有定义策略怎么办?
最佳答案
我认为正确的答案是“这取决于您的实现”。来自 JSR 规范(JSR317 §2.12“继承映射策略”):
Support for the combination of inheritance strategies within a single entity inheritance hierarchy is not required by this specification.
在本例中,层次结构的根是 A,并且显式指定了 JOINED,因此每个实体都有表。
现在,如果您的 JPA 实现支持每个层次结构的多个继承类型,从 Javadoc 和注释的来源来看,我个人希望有 A、B、C、D、{EFG} 的表
正如您所指出的,如果存在注释,则策略为 SINGLE_TABLE
除非明确指定。由于 Javadoc 和 Spec 引用了类层次结构中 @Inheritance 的处理,我认为如果当前类没有注释,我会查找父类并向上查找树,直到我要么找到注释,要么到达类层次结构的根(默认为 SINGLE_TABLE
)
关于java - @Inheritance默认为SINGLE_TABLE,还是默认为 "fallthrough"或SINGLE_TABLE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9620869/
我是一名优秀的程序员,十分优秀!