Таблица не может быть разрешена jpa

У меня проблема с моей сущностью. Я разместил все аннотации, а также настроил свой файл persistence.xml так, чтобы он автоматически генерировал таблицу из сущности, но я всегда получаю сообщение об ошибке в строке @Entity, что таблица не может быть разрешена.

Вот моя Сущность:

package org.planetjpa;

import java.io.Serializable;
import javax.persistence.*;

import java.util.Date;

@Entity
public class Reservationscene implements Serializable {
private static final long serialVersionUID = 1L;

@Id
@Column(name="id_res_scene")
private Integer idResScene;

@Temporal(TemporalType.TIMESTAMP)
@Column(name="date_reserv_scene")
private Date dateReservScene;

@ManyToOne
    @JoinColumn(name="scene_id")
private Scences scene_reserve;

@ManyToOne
    @JoinColumn(name="user_c_id")
private User user_courant;

public Scences getScene_reserve() {
    return scene_reserve;
}

public void setScene_reserve(Scences scene_reserve) {
    this.scene_reserve = scene_reserve;
}

public User getUser_courant() {
    return user_courant;
}

public void setUser_courant(User user_courant) {
    this.user_courant = user_courant;
}

public Reservationscene() {
}

public int getIdResScene() {
    return this.idResScene;
}

public void setIdResScene(int idResScene) {
    this.idResScene = idResScene;
}

public Date getDateReservScene() {
    return this.dateReservScene;
}

public void setDateReservScene(Date dateReservScene) {
    this.dateReservScene = dateReservScene;
}

}

Сцены Сущность:

package org.planetjpa;

import java.io.Serializable;
import java.util.ArrayList;

import javax.persistence.*;


@Entity
@Table(name = "scencesnational")
public class Scences implements Serializable {


@Id@Column(name="Id")
private int id_scene;
@Column(name="NOM")
private String nom_scenes;
@Column(name="Addresse")
private String adresse_scenes;
@Column(name = "`ADRESSE 2`")
private String boite_postale;
@Column(name="CP")
private String code_postale;
@Column(name="Surface")
private double surface_scence;
@Column(name="Type")
private String type_scene;
@Column(name="Capacité")
private int capacite_scene;
@Column(name="`Prix réservation`")
private double prix_scene;
private static final long serialVersionUID = 1L;


@OneToMany(mappedBy="scene_reserve")        
private ArrayList<Reservationscene> liste_reserv_scenes;

public Scences() {
    super();
}

public int getId_scene() {
    return id_scene;
}

public void setId_scene(int id_scene) {
    this.id_scene = id_scene;
}

public String getNom_scenes() {
    return nom_scenes;
}

public void setNom_scenes(String nom_scenes) {
    this.nom_scenes = nom_scenes;
}

public String getAdresse_scenes() {
    return adresse_scenes;
}

public void setAdresse_scenes(String adresse_scenes) {
    this.adresse_scenes = adresse_scenes;
}

public String getBoite_postale() {
    return boite_postale;
}

public void setBoite_postale(String boite_postale) {
    this.boite_postale = boite_postale;
}

public String getCode_postale() {
    return code_postale;
}

public void setCode_postale(String code_postale) {
    this.code_postale = code_postale;
}

public double getSurface_scence() {
    return surface_scence;
}

public void setSurface_scence(double surface_scence) {
    this.surface_scence = surface_scence;
}

public String getType_scene() {
    return type_scene;
}

public void setType_scene(String type_scene) {
    this.type_scene = type_scene;
}

public int getCapacite_scene() {
    return capacite_scene;
}

public void setCapacite_scene(int capacite_scene) {
    this.capacite_scene = capacite_scene;
}

public double getPrix_scene() {
    return prix_scene;
}

public void setPrix_scene(double prix_scene) {
    this.prix_scene = prix_scene;
}

}

Постоянство.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence   http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="projetjsf">



    <class>org.planetjpa.Films</class>
    <class>org.planetjpa.Lieux</class>
    <class>org.planetjpa.Reservationscene</class>
    <class>org.planetjpa.Scences</class>
    <class>org.planetjpa.User</class>



<properties>

  <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/projetjsf"/>
  <property name="javax.persistence.jdbc.user" value="root"/>
  <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
  <property name="javax.persistence.jdbc.password" value="amine1993"/>
  <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
  <property name="hibernate.show_sql" value="true" />
    <property name="hibernate.hbm2ddl.auto" value="create-drop" />
    <property name="hibernate.format_sql" value="true"/>
    <property name="hibernate.hbm2ddl.auto" value="update"/>
     <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>

    </properties>

</persistence-unit>
</persistence>

Когда я пытаюсь создать таблицу из объекта в инструментах JPA, я получаю эту ошибку:

Exception in thread "main" javax.persistence.PersistenceException:    [PersistenceUnit: projetjsf] Unable to build EntityManagerFactory
 at   org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:56)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.buildEntityManagerFactory(Main.java:94)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.execute(Main.java:80)
at org.eclipse.jpt.jpa.eclipselink.core.ddlgen.Main.main(Main.java:68)
Caused by: org.hibernate.AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: org.planetjpa.Scences.liste_reserv_scenes
at org.hibernate.cfg.annotations.CollectionBinder.getCollectionBinder(CollectionBinder.java:321)
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1693)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:765)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:684)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3406)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3360)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 6 more

Сцены.java:

package org.planetjpa;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.*;

/**
 * Entity implementation class for Entity: Scences
*
*/
@Entity
@Table(name = "scencesnational")
public class Scences implements Serializable {


@Id@Column(name="Id")
private int id_scene;
@Column(name="NOM")
private String nom_scenes;
@Column(name="Addresse")
private String adresse_scenes;
@Column(name = "`ADRESSE 2`")
private String boite_postale;
@Column(name="CP")
private String code_postale;
@Column(name="Surface")
private double surface_scence;
@Column(name="Type")
private String type_scene;
@Column(name="Capacité")
private int capacite_scene;
@Column(name="`Prix réservation`")
private double prix_scene;
private static final long serialVersionUID = 1L;


@OneToMany(mappedBy="scene_reserve")        
private List<Reservationscene> liste_reserv_scenes;

public Scences() {
    super();
}

public int getId_scene() {
    return id_scene;
}

public void setId_scene(int id_scene) {
    this.id_scene = id_scene;
}

public String getNom_scenes() {
    return nom_scenes;
}

public void setNom_scenes(String nom_scenes) {
    this.nom_scenes = nom_scenes;
}

public String getAdresse_scenes() {
    return adresse_scenes;
}

public void setAdresse_scenes(String adresse_scenes) {
    this.adresse_scenes = adresse_scenes;
}

public String getBoite_postale() {
    return boite_postale;
}

public void setBoite_postale(String boite_postale) {
    this.boite_postale = boite_postale;
}

public String getCode_postale() {
    return code_postale;
}

public void setCode_postale(String code_postale) {
    this.code_postale = code_postale;
}

public double getSurface_scence() {
    return surface_scence;
}

public void setSurface_scence(double surface_scence) {
    this.surface_scence = surface_scence;
}

public String getType_scene() {
    return type_scene;
}

public void setType_scene(String type_scene) {
    this.type_scene = type_scene;
}

public int getCapacite_scene() {
    return capacite_scene;
}

public void setCapacite_scene(int capacite_scene) {
    this.capacite_scene = capacite_scene;
}

public double getPrix_scene() {
    return prix_scene;
}

public void setPrix_scene(double prix_scene) {
    this.prix_scene = prix_scene;
}

}

person AmineBena17    schedule 25.12.2016    source источник
comment
Пожалуйста, добавьте к вопросу код объекта Scence или хотя бы Scences.liste_reserv_scenes поле. Сообщение об ошибке говорит, что: AnnotationException: Illegal attempt to map a non collection as a @OneToMany, @ManyToMany or @CollectionOfElements: org.planetjpa.Scences.liste_reserv_scenes -   -  person krokodilko    schedule 25.12.2016
comment
@krokodilko я уже сделал это   -  person AmineBena17    schedule 25.12.2016
comment
Код выглядит хорошо для меня; Поле имеет тип java.util Collection и Entity (указанный в файле persistence.xml) — возможно, считайте это ошибкой/функцией в вашем провайдере JPA и сообщите об этом. FWIW не нужно указывать свойства генерации схемы, зависящие от реализации, поскольку JPA 2.1 предоставляет эти стандартизированные   -  person Neil Stockton    schedule 25.12.2016
comment
я изменил версию JPA с 2.0 на 2.1, но у меня все та же проблема   -  person AmineBena17    schedule 27.12.2016


Ответы (1)


Похоже, этот вопрос уже задавали ">здесь. Тип коллекции должен быть интерфейсом, а не реализацией.

В Scenes.java измените тип с ArrayList на List или любой из интерфейсов коллекции, таких как Set, Collection и т. д.

@OneToMany(mappedBy = "scene_reserve")
    private List<Reservationscene> liste_reserv_scenes = new ArrayList<>();
person vijayanand    schedule 25.12.2016
comment
Если вы на самом деле посмотрите на последний класс, включенный в OP, на самом деле это java.util.List в этом списке. Независимо от того, является ли это проблемой, ее необходимо квалифицировать с помощью спецификации JPA, которая не навязывает это пользователю, и это требуется только одному поставщику JPA (Hibernate). другие поставщики JPA не навязывают код своим пользователям. - person Neil Stockton; 26.12.2016
comment
я меняю его на ArrayList и использую JPA 2.1, но у меня все та же проблема - person AmineBena17; 27.12.2016
comment
Попробуйте использовать List‹› вместо ArrayList‹› в типе и посмотрите, решит ли это проблему. - person vijayanand; 29.12.2016