【发布时间】:2014-04-29 15:43:43
【问题描述】:
我们在 Play Framework 2 中有以下使用 Java 和 EBean ORM 的模型类:
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
public abstract class Data<T> extends Model {
private T value;
public T getValue() {
return value;
}
public void setValue(T value) {
this.value = value;
}
}
和
@Entity
public class DecimalData extends Data<BigDecimal> {
}
后者是Data<T> 的子类的示例。其他子类使用String 或BigInteger 进行参数化。
生成的 DDL 不包含value 的任何(连接)表或列。
一般情况下是否可以为这个包含泛型的数据模型生成一个数据库方案? 如果不是,那么 Java 和数据库的简洁设计是什么?
编辑:重新思考问题后,预期的 db 方案应如下所示:
| decimal_value | string_value | big_integer_value |
我尝试了以下解决方法:
在超类中使用泛型类型
Object并专门用于子类:生成的 DDL 不包含任何值列的提示。在超类中完全省略
value并将其添加到每个子类中:有效,如果value属性具有不同的列名称规范:@Column(name="decimal_value"),否则仅存在随机类型的值。 到目前为止,此选项是最好的,但仍然是一种解决方法。
【问题讨论】:
标签: java generics inheritance playframework ebean