gpt4 book ai didi

java - 映射具有可能不存在的属性的对象

转载 作者:行者123 更新时间:2023-11-30 06:52:27 24 4
gpt4 key购买 nike

假设我有两个名为 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 列并映射到它所属的属性?另外,我如何映射表中可能存在或不存在的属性?

最佳答案

根据您所显示的表格布局,您可以按如下方式进行建模,这基本上会模仿您所描述的表格。

@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标识 Map<>完成同样的事情。

@Entity
public class Article {
@Id
@Column(name = "article_id")
private Long id;

@ElementCollection
private Map<String, String> textMap;
}

这避免了定义文本表实体,Hibernate 会自动生成如下所示的表:

+-------------+----------------+------------+
| textMap_key | textMap_value | article_id |
+-------------+----------------+------------+
| text1 | "Oh no" | 1 |
| text3 | "He has a dog" | 1 |
| text4 | "A labrador" | 1 |
+-------------+----------------+------------+

Map<>键将是文本类型,而值将是实际的文本内容。 Hibernate 会自动为您维护article_id 关系。

关于java - 映射具有可能不存在的属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42476004/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com