如何在没有连接表的数据库中存储字符串列表?

时间:2015-08-04 07:46:41

标签: java hibernate

我想在postgres数据库中存储List<String>

@ElementCollection
private List<String> products;

因此,Hibernate将创建一个 join 表。是否有可能阻止这种情况?

一种解决方法是使用双向映射创建一个显式类,如下所示:

@Entity
public class MainEntity {

    @OneToMany(mappedBy = "main")
    private List<Product> products;
}

@Entity
public class Product {
    @Id
    private long id;

    @ManyToOne
    private MainEntity main;

    private String text;
}

但我觉得这只是存储字符串列表的顶部,不是吗?

2 个答案:

答案 0 :(得分:1)

如果你没有找到更好的东西,试试这个:

  1. 使用@Transient标记您的列表,以便它永远不会直接保留。
  2. 准备一个额外的字段来保存你的列表,这个字段是JPA直接“持久化”的类型(连接,分隔的字符串似乎很自然)。
  3. 使用@PostLoad和@PrePersist注释的方法在这两个字段之间移动数据,从List转换为String并返回。

答案 1 :(得分:0)

我不确定,但你可以删除:

@ManyToOne
private MainEntity main;

在班级产品中。

我认为没有它可能会正常工作。 您想要从MainEntity或Product?

处理您的列表吗?