Java 使用JPA在mysql数据库中存储arraylist

Java 使用JPA在mysql数据库中存储arraylist,java,mysql,hibernate,jpa,arraylist,Java,Mysql,Hibernate,Jpa,Arraylist,我正在尝试使用JPA和Hibernate向mysql数据库添加一个双值的arraylist,但它并没有将值存储为双值,而是存储arraylist对象,然后是大量字符 下图是数据库的外观 这是我的密码: Playlist.java @Entity public class Playlist { @Id @GeneratedValue(strategy=GenerationType.AUTO) private int id; private String name, persistentId;

我正在尝试使用JPA和Hibernate向mysql数据库添加一个双值的arraylist,但它并没有将值存储为双值,而是存储arraylist对象,然后是大量字符

下图是数据库的外观

这是我的密码:

Playlist.java

@Entity
public class Playlist {

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id;

private String name, persistentId;
private double playlistId;
@ElementCollection
@CollectionTable(name ="tracks")
private ArrayList<Double> tracks = new ArrayList<Double>();

@OneToMany(mappedBy="playlist") 
Set<Song> songs;

public Playlist(String name, String persistentId, double playlistId, ArrayList<Double> tracks) {
    this.name = name;
    this.persistentId = persistentId;
    this.playlistId = playlistId;
    this.tracks = tracks;
}

public Playlist() {
}
@实体
公共类播放列表{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
私有int-id;
私有字符串名称,persistentId;
专用双播放ID;
@元素集合
@CollectionTable(name=“tracks”)
private ArrayList tracks=new ArrayList();
@OneToMany(mappedBy=“播放列表”)
设置歌曲;
公共播放列表(字符串名称、字符串持久ID、双播放ID、ArrayList曲目){
this.name=名称;
this.persistentId=persistentId;
this.playlyid=playlyid;
this.tracks=轨道;
}
公共播放列表(){
}
Main.java

Playlist p = new Playlist();
ArrayList<Double> tracks = new ArrayList<Double>();
        for (int j = 0; j < tList.getLength(); ++j) {
            Element track = (Element) tList.item(j);

            Double trackId = (Double) x.evaluate("key[.='Track ID']/following-sibling::integer[1]", track,
                    XPathConstants.NUMBER);
            tracks.add(trackId);
            p.setTracks(tracks);

        }
Playlist p=新播放列表();
ArrayList轨迹=新建ArrayList();
对于(int j=0;j

有谁能告诉我我做错了什么吗?

您正在映射
列表
接口的一个特定实现。Hibernate使用它自己的实现,所以我猜它会因此而失败。但奇怪的是,它并没有很难失败

尝试将其更改为:

@ElementCollection
@CollectionTable(name ="tracks")
private List<Double> tracks = new ArrayList<>();
@ElementCollection
@CollectionTable(name=“tracks”)
private List tracks=new ArrayList();

(新ArrayList()的
部分仅用于使其为空安全。

尝试设置更多信息:

@ElementCollection
@CollectionTable(name ="tracks" , joinColumns=@JoinColumn(name="playlist_id"))
@Column(name="track")
private List<Double> tracks = new ArrayList<>();
@ElementCollection
@CollectionTable(name=“tracks”,joinColumns=@JoinColumn(name=“playlist\u id”))
@列(name=“track”)
private List tracks=new ArrayList();

no我收到一个错误,提示“在类路径上找不到org.hibernate.search.event.FullTextIndexEventListener。hibernate搜索未启用。”当我改变它时。
tracks
表中的数据库列类型是什么?JPA将该列创建为tinyblob,但我必须将其更改为longblob以存储我需要的数据。这听起来不正确,这里需要的是一个名为
tracks
的表,其中引用了所有者表,以及一个用于存储
Double值(数字或类似的…)不,不幸的是,它所说的与上面的注释“1183[main]INFO org.hibernate.cfg.search.HibernateSearchEventListenerRegister-无法在类路径上找到org.hibernate.search.event.FullTextIndexEventListener。hibernate搜索未启用。”。。。“无法确定列:[org.hibernate.mapping.Column(track)]的类型:java.util.List,at table:Playlist。”它必须创建一个表,而不是文档中的blob,可能需要重新生成架构。请尝试使用一个Set-in-place List.your”图像"是一堆废话;你认为这对任何人都有什么帮助?@NeilStockton我想展示它,因为它不应该是这样的。它应该显示数字值。为什么不从为数据存储中的表提供DDL的定义开始,而不是那样呢???那么你就会看到它是否正确映射了DB。如果它为该co创建了一个BLOBlumn-then Hibernate一开始就搞错了,所以把注意力集中在映射上,而不是持久化代码上。还要发布什么类型的“ArrayList”…java.util?然后查看JPA实现的日志,看看为什么它会将它映射到BLOB(错误的)