java - java类存储在数据库的哪里?

标签 java sql inheritance orm

我需要建议反射(reflect)类对象模型的数据库结构的三种变体。数据库的结构应该允许 了解类继承。 为简单起见,类仅包含属性(不包含方法)。

我考虑单表继承、类表继承、具体表继承模式。

但并非所有事情对我来说都是清楚的。问题是:

1)类存储在数据库中的哪里,类的实例存储在哪里?

2) 比方说,B 类 扩展了A 类。如何让B的实例b理解它是派生的A?如何让b明白这是B类的实例,而不是A类的实例?

3)是否有一种模式,在继承层次结构中添加新类不需要更改表的结构?

4)是否有允许多重继承的模式?

UPD:可能我表达的想法不够清楚。假设它不是java,而是任何其他语言。这个问题是在数据库结构的背景下提出的。是否有允许多重继承的模式(如上)?

谢谢。

最佳答案

1) Where are classes stored in database, and where are instances of classes stored?

类不存储在数据库中,仅存储实例。在大多数情况下/映射器中,鉴别器会告诉映射器实例的类型/类。

2) Let's say, class B extends class A. How to make instance b of the B understand that it is a derived A? How to make b understand that this is an instance of class B, not class A?

这通常是通过鉴别器列完成的。

至于“如何使 B 的实例 b 理解它是派生的 A”:您可以在代码中执行此操作,即 B extends A。如果稍后更改,可能会破坏现有数据,因此您需要在设计模型时考虑继承,或者在需要进行更改时制定一些迁移策略。

3) Is there a patter in which an addition of a new class to inheritance hierarchy does not require changing the structure of tables?

这可以通过每类表或连接策略来实现。在这两种情况下,您都需要为新子类添加表,但不必更改现有的表(前提是您已经有一个鉴别器列,否则您必须添加一次) .

4) Is there a patter which allows multiple inheritance?

不,Java 不允许多重继承(这也适用于 orm),并且在大多数情况下都不需要它。尝试组合。

关于java - java类存储在数据库的哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33033485/

相关文章:

java - Genson 1.4 (JSON) 不处理继承的 Pojo 的

java - HandlerInterceptorAdaptarer Spring - 发现从元素 'bean' 开始的无效内容

Java对象空检查方法

java - BluetoothGatt.writeCharacteristic 一半时间返回 false

java - 从 subversion repo 中排除哪些 eclipse 文件

mysql - 从 INNER JOIN 两个表 SQL 中删除重复项

php - 使用 PHP 从 MySQL 选择并回显单个字段

c# - 多态性:做对

python - 如何: safely call super constructors with different arguments

java - uri : http://java. sun.com/jsp/jSTL/core 无法在 web.xml 或使用此应用程序部署的 jar 文件中解析