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

Java 映射具有可能不存在的属性的对象,java,hibernate,Java,Hibernate,假设我有两个类,分别名为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; } 还有一个类似于以下文本的表格

假设我有两个类,分别名为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_type   text_content    article_Id
  1         text1       "Oh no"         1
  2         text3       "He has a dog"  1
  3         text4       "A Labrador"    1

正如您所见,对于article_uid1,我有三个文本(text1、text3、text4)。本文没有文本类型2,这也不是问题。问题是,如何正确映射类TextList中的字符串,即检查text\u 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
来完成相同的任务

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

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

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

谢谢您的回答,但是没有办法使用相同的模型(意味着没有枚举)和相同的数据库吗?我正在尝试将一个工作程序切换到Hibernate,因此我不希望更改表的模型。
TextEntity
不要求您使用枚举。您可以轻松地将其替换为
字符串
,并按原样使用它,这将为您提供完全相同的表结构。我倾向于使用Enum将特定的有限数据限制在期望值内,因为
字符串
最终可以是“任何东西”。您好,我已经尝试了您的建议,但仍然有一个新问题。问题是这个表用于多个实体,比如当“text_type”=“info”(只是一个示例)时,文本不再属于类文章,而是属于其他内容。在这种情况下有什么建议吗?长话短说,我想检查column的值,以确定此行属于哪个类的哪个属性。这可能吗?请提前通知我。!这是与
文章
相关的“其他东西”,还是该表基本上包含与使用各种FK关系列的各种其他表关联的文本?
+-------------+----------------+------------+
| textMap_key | textMap_value  | article_id |
+-------------+----------------+------------+
| text1       | "Oh no"        | 1          |
| text3       | "He has a dog" | 1          |
| text4       | "A labrador"   | 1          |
+-------------+----------------+------------+