假设我有两个名为TextList和Article的类。
public class Article() {
public int a_id;
public TextList text;
}
public class TextList(){
private String text1;
private String text2;
private String text3;
private String text4;
}
像这样的表TEXT_ID:
text_id text_type text_content article_Id
1 text1 "Oh no" 1
2 text3 "He has a dog" 1
3 text4 "A Labrador" 1
正如您所看到的,对于 article_Id 1,我有三个文本(text1,text3,text4)。本文没有文本类型2,这不是问题。问题是,如何正确地在类 TextList 中映射字符串,这意味着检查 text_type 列并映射到它所属的属性?另外,我如何映射表中可能存在或不存在的属性?
答案 0 :(得分:1)
根据您已经显示的表格布局,您可以按照以下方式对其进行建模,这基本上可以模仿您所描述的表格。
@Entity
public class TextEntity {
@Id
@Column(name = "text_id")
private Long id;
@Enumerated
@Column(name = "text_type")
private TextType textType;
@Column(name = "text_content")
private string text;
@ManyToOne
@JoinColumn(name = "article_id", referencedColumnName = "article_id")
private Article article;
}
public enum TextType {
TEXT1,
TEXT2,
TEXT3,
TEXT4
}
但是,如果表格架构未被锁定且您可以使用略有不同的替代方案,我可能会建议您使用标识@ElementCollection
的{{1}}来完成同样的事情。
Map<>
这避免了必须定义文本表实体,Hibernate将自动生成表格,如下所示:
@Entity
public class Article {
@Id
@Column(name = "article_id")
private Long id;
@ElementCollection
private Map<String, String> textMap;
}
+-------------+----------------+------------+
| textMap_key | textMap_value | article_id |
+-------------+----------------+------------+
| text1 | "Oh no" | 1 |
| text3 | "He has a dog" | 1 |
| text4 | "A labrador" | 1 |
+-------------+----------------+------------+
键是文本类型,而值是实际文本内容。 Hibernate会自动为你维护article_id关系。