Java Spring Hibernate-类成员用作两次外键

Java Spring Hibernate-类成员用作两次外键,java,mysql,hibernate,spring-boot,foreign-keys,Java,Mysql,Hibernate,Spring Boot,Foreign Keys,我正在为我的研究编写一个“类似Deezer”的应用程序,我在外键映射方面遇到了问题。以下是有关守则: 抽象类跟踪列表 谢谢你的帮助 ::编辑:: 显然Hibernate无法处理ArrayList但List,多亏了@AdyJunior,我在trackList类中删除了@OneToMany on trackList字段,并在Album类中创建了一个新字段。因此,我将代码更改为: 抽象类跟踪列表 ::编辑2:: 子类不能有@ID,只能有主类。 因此,我从专辑类和播放列表类中删除了@ID。 这消除了以前

我正在为我的研究编写一个“类似Deezer”的应用程序,我在外键映射方面遇到了问题。以下是有关守则:

抽象类跟踪列表

谢谢你的帮助

::编辑:: 显然Hibernate无法处理ArrayListList,多亏了@AdyJunior,我在trackList类中删除了@OneToMany on trackList字段,并在Album类中创建了一个新字段。因此,我将代码更改为:

抽象类跟踪列表

::编辑2:: 子类不能有@ID,只能有主类。 因此,我从专辑类和播放列表类中删除了@ID。 这消除了以前的错误。 但现在我得到了这个:

org.hibernate.MappingException: Could not determine type for: packages.User, at table: playlist, for columns: [org.hibernate.mapping.Column(creator)]
::编辑3:: 要删除以前的错误,请执行以下操作:

班级播放列表

还添加了一种方法,用于将“拥有的”/“创建的播放列表”获取到用户类中:

    @OneToMany(mappedBy = "creator")
    public List<Playlist> getOwnPlaylist() {
        ArrayList<Playlist> pl = new ArrayList<>();
        for (Playlist p : playlists)
            try {
                if (isCreator(p))
                    pl.add(p);
            } catch (UserException e) {
                e.printStackTrace();
            }
        return pl;
    }
::编辑4(最后?:: 嗯,这是一个棘手的问题。您不能有一个名为“User”的表,因为它是为mysql/postgresql/etc保留的。。。 要删除以前的错误,请执行以下操作:

类用户


抽象类跟踪列表

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "TrackList_Track", 
joinColumns = @JoinColumn(name = "tlid",referencedColumnName = "name of the ref"), 
inverseJoinColumns = @JoinColumn(name = "tid",referencedColumnName = "name of the ref"))
@OneToMany(mappedBy = "album")
private List<Track> trackList;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name=“TrackList\u Track”,
joinColumns=@JoinColumn(name=“tlid”,referencedColumnName=“ref的名称”),
inverseJoinColumns=@JoinColumn(name=“tid”,referencedColumnName=“ref的名称”))
@OneToMany(mappedBy=“相册”)
私有列表跟踪列表;
许多人都面临同样的问题
和alah aalam

抽象类跟踪列表

@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "TrackList_Track", 
joinColumns = @JoinColumn(name = "tlid",referencedColumnName = "name of the ref"), 
inverseJoinColumns = @JoinColumn(name = "tid",referencedColumnName = "name of the ref"))
@OneToMany(mappedBy = "album")
private List<Track> trackList;
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name=“TrackList\u Track”,
joinColumns=@JoinColumn(name=“tlid”,referencedColumnName=“ref的名称”),
inverseJoinColumns=@JoinColumn(name=“tid”,referencedColumnName=“ref的名称”))
@OneToMany(mappedBy=“相册”)
私有列表跟踪列表;
许多人都面临同样的问题
和alah aalam

从trackList类的trackList字段中删除@OneToMany(mappedBy=“album”)。如果你需要关联“trackList x album”,你需要创建一个新字段。hibernate似乎在ArrayList类型上有问题,改为List,现在问题似乎就是你所指的。所以你说我需要创建一个新的字段,但是TrackList是一个抽象类,我不想添加对大多数子类都无用的字段。。。我能做什么?从trackList类的trackList字段中删除@OneToMany(mappedBy=“album”)。如果你需要关联“trackList x album”,你需要创建一个新字段。hibernate似乎在ArrayList类型上有问题,改为List,现在问题似乎就是你所指的。所以你说我需要创建一个新的字段,但是TrackList是一个抽象类,我不想添加对大多数子类都无用的字段。。。我能做什么?试过这个:Class TrackList
@manytomy(cascade=CascadeType.ALL)@JoinTable(name=“TrackList\u Track”,joinColumns=@JoinColumn(name=“tlid”,referencedColumnName=“playlists”),inverseJoinColumns=@JoinColumn(name=“tid”,referencedColumnName=“TrackList”)@OneToMany(mappedBy=“album”)private ArrayList trackList=new ArrayList()
Class Track
@manytomy(mappedBy=“trackList”)private ArrayList playlist=new ArrayList()无效。请尝试以下操作:Class TrackList
@manytomy(cascade=CascadeType.ALL)@JoinTable(name=“TrackList\u Track”,joinColumns=@JoinColumn(name=“tlid”,referencedColumnName=“playlists”),inverseJoinColumns=@JoinColumn(name=“tid”,referencedColumnName=“TrackList”)@OneToMany(mappedBy=“album”)private ArrayList trackList=new ArrayList()
Class Track
@manytomy(mappedBy=“trackList”)private ArrayList playlist=new ArrayList()它不工作。
@Entity
public class Genre {

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


    private String name;

    @ManyToMany(mappedBy = "genres")
    private ArrayList<Track> tracks = new ArrayList<>();

    @ManyToMany(mappedBy = "genres")
    private ArrayList<Album> albums = new ArrayList<>();

    ...

}
@Entity
public class Performer {

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


    private String name;


    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "Performer_Album", joinColumns = @JoinColumn(name = "peid"), inverseJoinColumns = 
    @JoinColumn(name = "aid"))
    private ArrayList<Album> albums = new ArrayList<>();


    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "Performer_Track", joinColumns = @JoinColumn(name = "peid"), inverseJoinColumns = 
    @JoinColumn(name = "tid"))
    private ArrayList<Track> tracklist = new ArrayList<>();

    ...

}
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "user_type")
@DiscriminatorValue("CLASSIC")
public class User {

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


    private String pseudo;


    private String email;


    private String password;


    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "User_Playlist", joinColumns = @JoinColumn(name = "uid"), inverseJoinColumns = 
    @JoinColumn(name = "plid"))
    private ArrayList<Playlist> playlists;

    ...

}
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-05-05 20:59:00.301 ERROR 21040 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.AnnotationException: java.util.ArrayList collection type not supported for property: org.ThePouil.projects.MyTunes.model.beans.music.TrackList.trackList
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.ThePouil.projects.MyTunesApplication.main(MyTunesApplication.java:10) [classes/:na]
Caused by: org.hibernate.AnnotationException: java.util.ArrayList collection type not supported for property: org.ThePouil.projects.MyTunes.model.beans.music.TrackList.trackList
    at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:317) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1939) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:975) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:802) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:254) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:230) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:273) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    ... 16 common frames omitted

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "list_type")
public abstract class TrackList {

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


    private String name;


    private String imageFileName;


    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "TrackList_Track", joinColumns = @JoinColumn(name = 
    "tlid"), inverseJoinColumns = 
    @JoinColumn(name = "tid"))
    private List<Track> trackList = new ArrayList<>();

    ...
}
@Entity
@DiscriminatorValue("ALBUM")
public class Album extends TrackList {

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

    /* a reference to the List<Track> trackList from mother class */
    /* overrided getter/setter
    @OneToMany(mappedBy = "album")
    private List<Track> trackList = new ArrayList<>();

    private LocalDate date;


    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "Album_Genre", joinColumns = @JoinColumn(name = "aid"), 
    inverseJoinColumns = 
    @JoinColumn(name = "gid"))
    private List<Genre> genres = new ArrayList<>();


    @ManyToMany(mappedBy = "albums")
    private List<Performer> performers = new ArrayList<>();

    ...

}
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2020-05-06 11:50:05.582 ERROR 17088 --- [           main] o.s.boot.SpringApplication               : Application run failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.ClassCastException: org.hibernate.mapping.JoinedSubclass cannot be cast to org.hibernate.mapping.RootClass
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.2.6.RELEASE.jar:2.2.6.RELEASE]
    at org.ThePouil.projects.MyTunesApplication.main(MyTunesApplication.java:10) [classes/:na]
Caused by: java.lang.ClassCastException: org.hibernate.mapping.JoinedSubclass cannot be cast to org.hibernate.mapping.RootClass
    at org.hibernate.cfg.annotations.PropertyBinder.bind(PropertyBinder.java:214) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.annotations.PropertyBinder.makePropertyValueAndBind(PropertyBinder.java:205) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:2282) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:975) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:802) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:254) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:230) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:273) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233) ~[hibernate-core-5.4.12.Final.jar:5.4.12.Final]
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341) ~[spring-orm-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
    ... 16 common frames omitted

org.hibernate.MappingException: Could not determine type for: packages.User, at table: playlist, for columns: [org.hibernate.mapping.Column(creator)]
    @ManyToOne
    @JoinColumn(name = "uid")
    private User creator;

    @OneToMany(mappedBy = "creator")
    public List<Playlist> getOwnPlaylist() {
        ArrayList<Playlist> pl = new ArrayList<>();
        for (Playlist p : playlists)
            try {
                if (isCreator(p))
                    pl.add(p);
            } catch (UserException e) {
                e.printStackTrace();
            }
        return pl;
    }
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table playlist add constraint FKpqwn3quei4t1vlr1eh3pt4fts foreign key (uid) references user (uid)" via JDBC Statement

...

java.sql.SQLException: Failed to add the foreign key constraint. Missing index for constraint 'FKpqwn3quei4t1vlr1eh3pt4fts' in the referenced table 'user'
@Entity
@Table(name = "MT_User")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "user_type")
@DiscriminatorValue("CLASSIC")
public class User {

     ...

}
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name = "TrackList_Track", 
joinColumns = @JoinColumn(name = "tlid",referencedColumnName = "name of the ref"), 
inverseJoinColumns = @JoinColumn(name = "tid",referencedColumnName = "name of the ref"))
@OneToMany(mappedBy = "album")
private List<Track> trackList;