- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 3 个类扩展了一个抽象基类,它们都具有相同的形式结构。它们都是使用 Hibernate/Spring 数据工具构建并正常工作的,并且已经在生产系统中运行了几个月。然而,Hibernate 不支持开箱即用的鉴别器列 Multi-Tenancy ,因此我一直致力于过渡到 EclipseLink 2.5.2,据说它可以支持。
我花了至少一天的时间尝试让以下内容正常工作 - 如果我无法列出我当时尝试过的所有配置,我深表歉意,因为它们太多了。我希望目前的配置至少能解决比我更熟悉 EclipseLink 的人的问题。基类,减去访问器和构造函数:
@Converters(
@Converter(name = "UUIDConverter", converterClass = UUIDToStringConverter.class)
)
@MappedSuperclass
@Table(name = "label_type_definitions")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "scope", columnDefinition = "varchar(20) not null")
public abstract class LabelTypeDefinition implements LabelType {
@Id
@Convert("UUIDConverter")
@Column(name = "id", length = 40, columnDefinition = "VARCHAR(40)")
@GeneratedValue(generator = "uuid")
@UuidGenerator(name = "uuid")
protected final UUID id;
@Column(name = "name", nullable = false)
protected String name;
@Column(name = "description")
protected String description;
...
}
子类。树:
@Entity
@DiscriminatorValue(value = "TREE")
public class LabelTreeDefinition extends LabelTypeDefinition implements LabelTree {
....
}
场景:
@Entity
@DiscriminatorValue(value = "SCENARIO")
public class LabelScenarioDefinition extends LabelTypeDefinition implements LabelScenario {
...
}
节点:
@Entity
@DiscriminatorValue(value = "NODE")
public class LabelNodeDefinition extends LabelTypeDefinition implements LabelNode {
...
}
LabelType 接口(interface)扩展了 Serializable 和我自己的 Identificable,并描述了模型的访问器契约(模型的接口(interface) = 不是我的设计,是我的前任为 API 烘焙的单独 Maven 项目的结果)。 LabelTree/Node/Scenario 接口(interface)都扩展了 LabelType,但没有添加到契约中。
问题:当此配置构建我的数据库时,它忽略表规范并且不构建范围列。
LABELTREEDEFINITION
id
name
description
LABELNODEDEFINITION
id
name
description
LABELSCENARIODEFINITION
id
name
description
对我来说,这意味着它完全忽略了 @Inheritance 注释并且默默地这样做。我可以强制它构建所有这些内容,并通过向每个子类添加 @Table 注释并包含范围列(后者是使用 Hibernate 时的构建方式)来使其看起来表面上正确,但是当然我的所有 Spring数据查询忽略鉴别器。
这一切是否都是实现不同接口(interface)的结果?如果是这样,那我很担心,因为它看起来非常脆弱。在我看来,这与所描述的内容完全相同,例如。在这里(http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Inheritance)。是否有我错过的东西或者我忽略了 EclipseLink 的一些怪癖?
最佳答案
好的,所以我通过在调试器中痛苦地运行 EclipseLink 的代码解决了这个问题。我碰巧注意到,当它尝试在 org.eclipse.persistence.internal.jpa.metadata.accessors.classes.EntityAccessor 中分配继承时,它没有找到父类(super class) LabelTypeDefinition。对于 Hibernate 来说这不是问题,所以我没有想到抽象基类也必须包含在 persistence.xml 中。
<persistence-unit name="[MYPROJECT]" transaction-type="RESOURCE_LOCAL">
...
<class>com.[MYPROJECT].persistence.labeltype.LabelNodeDefinition</class>
<class>com.[MYPROJECT].persistence.labeltype.LabelTreeDefinition</class>
<class>com.[MYPROJECT].persistence.labeltype.LabelScenarioDefinition</class>
<class>com.[MYPROJECT].persistence.labeltype.LabelTypeDefinition</class>
...
</persistence-unit>
但是,当我第二次运行它时,我发现它仍然找不到该类。作为万福玛丽,我在父类中用 @Entity 替换了 @MappedSuperclass,这一切都有效。
现在修复的第一部分有点令人头疼,即。我应该想到 EclipseLink 可能需要比 Hibernate 更明确的配置。然而,第二个让我觉得是一个错误,特别是因为我在很多地方找到了表明它应该可以工作的文档(包括我上面发布的 eclipse wiki 链接)。因为从语义上来说,它似乎更正确:事实上,我的抽象基类并不是一个“实体”,因为没有 LabelType 对象会被持久保存。但它是一个由我的实体“映射”的父类(super class)。
关于java - SINGLE_TABLE @Inheritance 不继承的 EclipseLink JPA 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25142607/
晚上好。我正在尝试使用 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。它工作正常。
我是一名优秀的程序员,十分优秀!