如何在SQL数据库中保存List?

时间:2015-02-09 22:59:05

标签: java sql list

我的实体类包含primefaces.model.map.Marker的列表:

@Entity
@Table(name = "appuser")
public class UserEntity extends BaseEntity {

    private List<Marker> places = new ArrayList<Marker>();

    public List<Marker> getPlaces() {
    return places;
  }
}

另外,我有一个描述我的表的sql文件。我知道如何保存String,double和其他原始类型。但我不知道如何使用我自己类型的对象保存数组,基本类型集合或集合。

你能帮我解决这个问题,将列表保存到Oracle DB吗?

我知道存在不同的方法:将列表保存为单个字符串,作为对象......

P.S。:如果你能给我一个描述Java和SQL之间相互作用的网站或书籍的参考,那就太棒了。

2 个答案:

答案 0 :(得分:3)

Lists的常用DB表示是一个单独的表。阅读JPA&#39; @OneToMany注释。

关于这个主题的信息的一个很好的来源是JPA2 Specification(充满了例子,但我听说有些人说它难以阅读/无聊)

答案 1 :(得分:2)

正如Duckstep所说的那样,通常是

  

列表的常用数据库表示是一个单独的表。

如果您不想在数据库中创建OtM连接,可以创建一个帮助程序类,将列表放在String中,并将字符串拆分为如下所示的列表:

public class Helper {

    public String stringify(List<Marker> l) {
        String rs = "";
        for (Marker marker : l) {
            rs = rs + ',' + marker.toString();
        }
        rs.substring(1);
        return rs;
    }

    public List<Marker> makeList(String rs){
        List<Marker> rl = new LinkedList<Marker>();
        String[] a = rs.split(",");
        for (String string : a) {
            Marker rm = new Marker();
            // I don't know what class of marker you use, 
            //but here you should create the marker from the string
            rl.add(rm);
        }
        return rl;
    }

}

但是说真的!最好使用OtM表,因为您无需重复就完全填满了数据库。