- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有以下方案:TableA1和TableA2存在于数据库中,每个都由一个实体bean表示。由于它们是相关的,我创建了一个抽象类(TableA,它是一个实体,但在数据库中不存在),其中两个实体都继承自该类。另外,TableA与TableB具有一对一的关系。
我的目标是查询 TableB,并根据类型从那里获取 TableA1 或 TableA2 的信息。
TableA1和TableA2各有一个id(每个表自动生成一个序号,因此可能会出现重复)。
在 TableB 中,我有两列组合起来代表外键:type 和 id。 Type = 1 表示 id 在 TableA1 中。与 TableA2 类似。
我的问题是我不知道如何将这两列定义为外部外键。这就是我所得到的:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name="type")
public abstract class TableA {
@Id
@Column(name = "type")
protected int type;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
protected int id;
@Column(name = "name")
private String name;
// Getters and setters
}
@Entity
@DiscriminatorValue("1")
@Table (name="tableA1")
public class TableA1 extends TableA {
@Column(name="col1")
private String col1;
// Getters and setters
}
@Entity
@DiscriminatorValue("2")
@Table (name="tableA2")
public class TableA2 extends TableA {
@Column(name="col2")
private String col2;
// Getters and setters
}
@Entity
@Table (name="tableB")
public class TableB {
@Id
@Column(name="someId")
private Integer someId;
@Column(name="type")
private int type;
@Column(name="id")
private Integer id;
@OneToOne(optional = false, cascade = CascadeType.ALL)
@JoinColumns({
@JoinColumn(name = "type"),
@JoinColumn(name = "id" )
})
private TableA tableA;
// Getters and setters
}
更新
我在寻找不可能的事情吗?这是我发现的:
Polymorphic relations to non-leaf classes in a table-per-class hierarchy have many limitations. When the concrete subclass is not known, the related object could be in any of the subclass tables, making joins through the relation impossible. This ambiguity also affects identity lookups and queries; these operations require multiple SQL SELECTs (one for each possible subclass), or a complex UNION.
更新2
数据库中已存在表A1、表A2和表B,并且具有以下结构:
CREATE TABLE TableA1 (
surrogate_key int AUTO_INCREMENT,
some_char char(30),
PRIMARY KEY (surrogate_key)
);
CREATE TABLE TableA2 (
surrogate_key int AUTO_INCREMENT,
some_int int,
PRIMARY KEY (surrogate_key)
);
CREATE TABLE TableB (
surrogate_key int AUTO_INCREMENT,
type int, // if type=1, sk represents the surrogate_key of tableA1
// if type=2, sk represents the surrogate_key of tableA2
sk int,
description varchar(200),
PRIMARY KEY (surrogate_key)
);
最佳答案
更新答案:
已更新以匹配数据库
您可以使用 getDiscriminatorValue() 来访问 DiscriminatorValue。
像这样定义映射:
@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.INTEGER)
public abstract class TableA implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
@Column(name = "surrogate_key")
protected int id;
@Id
@Column(name = "type")
protected int type;
// Constructors & getters/setters
@Transient
public String getDiscriminatorValue() {
DiscriminatorValue val = this.getClass().getAnnotation(DiscriminatorValue.class);
return val == null ? null : val.value();
}
}
@Entity
@DiscriminatorValue("1")
public class TableA1 extends TableA {
@Column(name = "some_char", length = 1)
private char someChar;
// Constructors & getters/setters & toString/equals
}
@Entity
@DiscriminatorValue("2")
public class TableA2 extends TableA {
@Column(name = "some_int")
private int someInt;
// Constructors & getters/setters & toString/equals
}
@Entity
public class TableB implements Serializable {
@Id
@GeneratedValue
@Column(name = "surrogate_key")
private int id;
@OneToOne
@Cascade(value = CascadeType.SAVE_UPDATE)
@JoinColumns({@JoinColumn(name = "sk", referencedColumnName = "surrogate_key"),
@JoinColumn(name = "type", referencedColumnName = "type")})
private TableA tableA;
@Column(name = "description", length = 200)
private String description;
// Constructors & getters/setters & toString/equals
}
并像这样查询:
newSession.createQuery("from TableB tb where tb.tableA.type=:type order by tb.id asc").setParameter("type", 1));
关于java - JPA实体: inheritance and one-to-one relationship not working simultaneously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27624410/
我正在为我的项目测试 FlowJS,我遇到了 Type Aliases 的问题. 我为 API 构建了一个 Web SDK:我有一个使用此方法的 Helper 类: class Helper {
我是 Dart 的新手,仍在学习它带来的所有细微差别。我当前的任务真正困扰的一件事是从父类继承(或代理)静态方法。 void main() { EnglishCasual.greet(); } c
我正在尝试巩固 Go 提供的继承概念(也许是“组合”而不是纯粹的继承)。但是,我无法理解为什么我不能将“父”类型用作 func 参数来生成作用于该参数的通用函数。 package main impor
我在准确表述它时遇到问题,所以我在标题中留下了更笼统的描述(如果您对问题有更准确的描述,请发表评论,我会编辑标题)。 问题: AudioStream 和VideoStream 两个类派生自基类Medi
我的应用程序不仅具有“用户”,而且还具有“管理员”和“ super 管理员”。由于所有这三个共享相同的属性,因此我只想使用一个带有附加属性“role”的表,该属性可以是“user”,“admin”或“
我正在使用数据库优先方法和 DbContext。我的数据模型中有几个继承结构 (TPH)。但是 DbContext 只为基类创建一个 DbSet,而没有为子类创建一个 DbSet。我应该如何检索指定子
我正在使用数据库优先方法和 DbContext。我的数据模型中有几个继承结构 (TPH)。但是 DbContext 只为基类创建一个 DbSet,而没有为子类创建一个 DbSet。我应该如何检索指定子
我有一个生成很多子对象的应用程序,每个子对象都与一些全局应用程序对象一起工作,例如在全局应用程序注册表中注册自己,更新应用程序统计信息等。 应用程序应该如何将访问这些全局对象的能力传递给 child
我有 2 个结构,其中一个继承了由 type Common struct {...} 表示的所有结构中共有的值 type Common struct{ Id int CreatedAt
我的代码: Ext.onReady(function() { // Every property is declared inside the class Ext.define('MyCustomPa
我有一个包含多个类的应用程序,这些类继承/是第三方库类的子类。例如,来自 Qt Framework 的 QDialog。 我应该在应用程序的 UML 类图中指定继承关系吗? 是否期望(或标准)表示此类
我遇到了这个问题,因为我认为我对 Backbone 的理解不正确。 我有一个名为 Runnable 的父类(super class)和一组继承自它的子类: var Runnable = Backbon
考虑以下 HTML: foo bar 和 CSS: a { text-decoration:none; border-bottom-width: 0px; border-bot
我想做个模板Class BaseDialog ,但在进行最终对话时 MyDialog1 , 继承了 BaseDialog , 我收到错误,然后无法在设计模式下显示对话框。 以下是我得到的错误列表。 a
我对 android 文档中的这两个术语感到困惑!! these screenshot about what i mean 最佳答案 常量是用 static 和 final 修饰符声明的字段。继承常量
我最近遇到了一个新的警告: 继承构造函数不继承省略号 我正在尝试管道 Object{42}; // ... into an init that handles integers ...和... Obj
我正在使用 TypeScript 开发 Aurelia 应用程序。在此应用程序中,我定义了一组自定义元素,每个元素共享一组可绑定(bind)属性,这些属性被转换为 css 设置,如以下简化示例所示:
我想知道为什么人们会说: “继承类不继承构造函数”。 如果你可以使用父类的构造函数,无参构造函数无论如何都会被自动调用。 例子: #include using namespace std; clas
我刚刚开始探索 Kotlin 语言。我正在为继承、var&val 和副作用而苦苦挣扎。 如果我用 val x 声明一个特征 A 并在 AImpl 中覆盖 x ,则可以将其覆盖为 var(参见下面的代码
我正面临一个编码/解码问题,涉及使用 MOXy 的 JAXB 实现和外部元数据绑定(bind)文件的继承和多态性。 我无法控制 XML 文件或模型类。 模型内部有多个类继承其他 DTO 类。 这是我正
我是一名优秀的程序员,十分优秀!