【发布时间】:2014-07-12 11:34:20
【问题描述】:
在 JPA 中,我可以将实体映射到一个表,其中该实体的属性跨多行保持不变?
基本上,我可以像这样映射一个类吗:
public Document {
String id;
String title;
String author;
String size;
}
到像这样的表
CREATE TABLE DOC_METADATA
(
DOC_ID NUMBER,
ATTR_NAME VARCHAR,
ATTR_VALUE VARCHAR
);
内容类似
DOC_ID | ATTR_NAME | ATTR_VALUE
1 "title" "Alice in wonderland"
1 "author" "Lewis Carroll"
1 "size" "500kb"
2 "title" "Winnie the pooh"
2 "author" "A. A. Milne"
2 "size" "600kb"
【问题讨论】:
-
这行得通。当您从表中查询所有数据时,您的表的每一行都会有一个实体实例。
-
如果我运行 Document doc = em.find(Document.class, "1");文档中会有什么内容?
-
它们不会跨多行持久化......每行有两个实体。不,你不能这样做
-
我知道这不是标准或最佳实践,但至少您可能能够将该表中的各个字段映射为 OneToOne 关系?像 OneToOne(fetch=FetchType.EAGER) @JoinTable(name="DOC_METADATA" joinColumns=@JoinColumn(name="DOC_ID", referencedColumnName="ATTR_NAME")) 之类的东西基本上像映射普通实体一样映射字符串?跨度>