- 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/
晚上好。我正在尝试使用 JPA/Hibernate 将类层次结构映射到单个表,并在我的子类上收到一条错误消息,指出“实体没有定义主键属性”。类定义如下: @Entity @Table(name = "
我将一些 hbm 配置翻译为带注释的 java 类。在 hbm 中,一些类是使用继承策略“SINGLE_TABLE”定义的,并且其他一些实体以多对一关系将其引用为 Map。 当我尝试启动应用程序时,出
在使用 SINGLE_TABLE 继承策略时是否可以使用枚举作为判别器值? 最佳答案 如果您想要实现的是不重复鉴别器值,则有一个简单的解决方法。 @Entity @Inheritance(strate
AppEngine 仅支持 JPA 继承的“TABLE_PER_CLASS”和“MAPPED_SUPERCLASS”。不幸的是,不支持“JOINED”,尤其是“SINGLE_TABLE”。 我想知道实
我有 3 个类: @Entity @Inheritance(strategy=InheritanceType.SINGLE_TABLE) public abstract class Tag {
例如我们有这样的结构: @Entity @Table(name = "A") @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @Discri
我的类结构如下所示...我在这里实现了两种单独的策略,但根类的继承策略(即 InheritanceType.JOINED)正在整个层次结构中使用... @Entity @Inheritance(str
我有一个包含三个子表 Sub1、Sub2 和 Sub3 的 HeaderTable。 Sub1和Sub2需要引用HeaderTable中的同一行数据,而Sub3需要引用另一行数据。 我所做的是创建一个
我想知道是否可以在 JPA 中定义一个通用实体(如我的情况 PropertyBase)并派生具体实体类(如 ShortProperty 和 StringProperty)并将它们与 SINGLE_TA
使用这些类,您将如何将“Person”的记录更改为“Employee”。 /** * @Entity * @InheritanceType("SINGLE_TABLE") * @Discrimi
我有 3 个类扩展了一个抽象基类,它们都具有相同的形式结构。它们都是使用 Hibernate/Spring 数据工具构建并正常工作的,并且已经在生产系统中运行了几个月。然而,Hibernate 不支持
这是我想要的配置: 一个实体“Account”与另外两个实体“Author”和“AccountBackend”的 JOINED 继承。 然后我希望“AccountBackend”与其他两个实体“Adm
我在尝试使用装饰有简单限制的 hibernate 条件从数据库中列出对象时出现此错误 Criteria criteria = session.createCriteria(Licence.class)
好吧,这可能是一个远景,但现在就开始吧。 在 Java (JRE 1.6.0_26-b03) 中,我有两个类,SuperControl 及其子类 SubControl。它们都需要是持久对象,我正在使用
我将 Hibernate 3.2.2 GA 与 HSQLDB 2.0 GA 一起使用,并且我有一个类似于以下的类层次结构: @Entity @Table(name = "A_TABLE") @Inhe
我已经使用 SINGLE_TABLE with SecondaryTables 实现了继承层次结构. 这可以正常工作,但是当我的辅助表的字段为空(= Oracle 中的 null)时,对实体的下一次更
我有一个经典的 Hibernate @Inheritance(strategy=InheritanceType.SINGLE_TABLE) 和 @DiscriminatorFormula。它工作正常。
我是一名优秀的程序员,十分优秀!