【发布时间】:2016-06-28 16:28:16
【问题描述】:
目前我有两个表格 - Product 和 Statistics。还有两个 java 实体(产品、统计)
它们之间的映射是 1:1。
我想删除一个实体(统计),因为从这个实体中我只需要一个名为“magicValue”的列。
有没有办法只使用一个实体 - Product,其中包含magicValue?
(不需要统计类?)
我在考虑 OneToOne 映射或嵌入式类型的使用,但对于所有这些可能性,需要 Statistics java 类
如果我的问题不合理,请根据您的知识写出最佳解决方案。
更多详细信息:
从表 Product 我需要所有列。
从表 Statistics 我只需要一列 (MAGIC_VALUE)
Sql 表:
CREATE TABLE PRODUCT
(
"PRODUCT_ID" NUMBER(20,0),
"NAME" VARCHAR2(30 BYTE),
PRIMARY KEY (`PRODUCT_ID`)
);
CREATE TABLE STATISTICS
(
"STATISTICS_ID" NUMBER(20,0) PRIMARY KEY,
"PRODUCT_ID_FK" NUMBER(20,0),
"MAGIC_VALUE" VARCHAR2(30 BYTE),
"OTHER_USELESS_COLUMN" VARCHAR2(30 BYTE),
...
PRIMARY KEY (`STATISTICS_ID`)
FOREIGN KEY (`PRODUCT_ID_FK`) REFERENCES PRODUCT(PRODUCT_ID)
);
当前的 java 类如下所示:
@Entity
@Table(name="PRODUCT")
class Product {
@Id
@Column(name = "PRODUCT_ID")
protected Integer productId;
@Column(name = "NAME")
protected String name;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
protected Statistics stat;
}
这是统计 java 类
我只需要一列(magicValue)
@Entity
@Table(name="STATISTICS")
class Statistics {
@Id
@Column(name = "STATISTICS_ID")
protected Integer statisticsId;
@OneToOne(mappedBy = "statistics")
protected Product product;
@Column(name = "MAGIC_VALUE")
protected String magicValue; // <-- only this is needed
@Column(name = "OTHER_USELESS_COLUMN")
protected String uselessColumn;
...
}
所需的解决方案
- 没有 sql 更改
- 去掉 Statistics java 类(如果可能的话)
-
仅更改 Product java 类,例如:
@Entity @Table(name="PRODUCT") class Product { @Id @Column(name = "PRODUCT_ID") protected Integer productId; @Column(name = "NAME") protected String name; @someHowMap to sql table Statistics, but in Product have direct magicValue value protected String magicValue; }
其他(次要)信息:
- 与数据库的连接是只读的。
- 我只使用注释(没有 cfg 文件)
- 我没有更改 sql 架构的权限
- 使用 Java 8 或 Scala 2.10、Hibernate 5.2
谢谢
【问题讨论】:
标签: java hibernate hibernate-mapping