2017-08-10 80 views
1

不幸的是,在这种情况下,其他实体名称,模式名称不起作用。我不明白这个解释的描述。这是什么意思?jpa必须为序号字段定义非只读映射

异常[的EclipseLink-93](Eclipse持久服务 -

2.6.4.qualifier):org.eclipse.persistence.exceptions.DescriptorException异常 说明:表[驱动]不存在于这个描述符。 描述符:RelationalDescriptor(com.spring_test2.jpa.models.Tickets - > [DatabaseTable(门票)])

异常[的EclipseLink-93](Eclipse持久服务 - 2.6.4.qualifier):有机eclipse.persistence.exceptions.DescriptorException异常 描述:表[票据]不存在于此描述符中。 描述符:RelationalDescriptor(com.spring_test2.jpa.models.Drivers - > [DatabaseTable(驱动程序)])

异常[的EclipseLink-41](Eclipse持久服务 - 2.6.4.qualifier):有机eclipse.persistence.exceptions.DescriptorException异常 描述:必须为数字字段的序列 定义非只读映射。描述符: RelationalDescriptor(com.spring_test2.jpa.models.Tickets - > [DatabaseTable(门票)])

异常[的EclipseLink-41](Eclipse持久服务 - 2.6.4.qualifier):有机eclipse.persistence.exceptions.DescriptorException异常 描述:必须为数字字段的序列 定义非只读映射。描述: RelationalDescriptor(com.spring_test2.jpa.models.Drivers - > [DatabaseTable(司机)])在我的实体我找不到

没有什么特殊的,他们深受我的测试。

门票

@Entity 
@Table(name = "tickets") 
public class Tickets { 

    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Integer id; 

    @Column(name = "from_point") 
    @Size(min = 0, max = 255) 
    private String from; 

    @Column(name = "throw") 
    @Size(min = 0, max = 255) 
    private String throwp; //throw point 

    @Column(name = "to_point") 
    @Size(min = 0, max = 255) 
    private String to; 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "city_id") 
    private Cities city; 

    @Column(name = "hum") 
    private Integer hum; 

    @Column(name = "cost") 
    private Integer cost; 

    @Column(name = "phone") 
    private Integer phone; 

    @Column(name = "date", nullable = false, insertable = false, updatable = false, columnDefinition = "Datetime DEFAULT CURRENT_TIMESTAMP") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date date; 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "ticket_status_id") 
    private TicketStatuses ticketStatus; 

    @OneToMany(mappedBy = "driver", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private List<TicketsDrivers> driver; 

setters/getters 

驱动程序

@Entity 
@Table(name = "drivers") 
public class Drivers { 

    @Id 
    @GeneratedValue(strategy= GenerationType.IDENTITY) 
    @Column(name = "id") 
    private Integer id; 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "role_id") 
    private Roles role; 

    @OneToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "profile_id") 
    private Profiles profile; 

    @Column(name = "name") 
    @Size(min = 0, max = 255) 
    private String name; 

    @Column(name = "phone") 
    @Size(min = 0, max = 255) 
    private String phone; 

    @Column(name = "mail") 
    @Size(min = 0, max = 255) 
    private String mail; 

    @Column(name = "login") 
    @Size(min = 0, max = 32) 
    private String login; 

    @Column(name = "password") 
    @Size(min = 0, max = 32) 
    private String password; 

    @OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private List<TicketsDrivers> tickets; 

setters/getters 

而且TicketsDrivers

@Entity 
@Table(name = "tickets_drivers") 
public class TicketsDrivers { 

@Id 
@GeneratedValue(strategy= GenerationType.IDENTITY) 
@Column(name = "id") 
private Integer id; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "driver_id") 
private Drivers driver; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "ticket_id") 
private Tickets ticket; 

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "ticket_status_id") 
private TicketStatuses ticket_status; 

setters/getters 

的persistence.xml

<persistence 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" 
      version="2.0"> 

    <persistence-unit name="Services" transaction-type="RESOURCE_LOCAL"> 
     <description> 
      Maven Test JPA 
     </description> 
     <!--provider>org.hibernate.ejb.HibernatePersistence</provider--> 
     <class>com.spring_test2.jpa.models.Test</class> 
     <class>com.spring_test2.jpa.models.Cities</class> 
     <class>com.spring_test2.jpa.models.Countries</class> 
     <class>com.spring_test2.jpa.models.Admins</class> 
     <class>com.spring_test2.jpa.models.dictionaries.TicketStatuses</class> 
     <class>com.spring_test2.jpa.models.dictionaries.StaticPages</class> 
     <class>com.spring_test2.jpa.models.dictionaries.Sources</class> 
     <class>com.spring_test2.jpa.models.dictionaries.Roles</class> 
     <class>com.spring_test2.jpa.models.dictionaries.ProfileTypes</class> 
     <class>com.spring_test2.jpa.models.dictionaries.Partners</class> 
     <class>com.spring_test2.jpa.models.dictionaries.Newsletter</class> 
     <class>com.spring_test2.jpa.models.dictionaries.DriverStatuses</class> 
     <class>com.spring_test2.jpa.models.Auto</class> 
     <class>com.spring_test2.jpa.models.Drivers</class> 
     <class>com.spring_test2.jpa.models.Models</class> 
     <class>com.spring_test2.jpa.models.Profiles</class> 
     <class>com.spring_test2.jpa.models.Tickets</class> 
     <class>com.spring_test2.jpa.models.TicketsDrivers</class> 
     <class>com.spring_test2.jpa.models.UndergroundLines</class> 
     <class>com.spring_test2.jpa.models.UndergroundStations</class> 

     <properties> 
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/spring_test2" /> 
      <property name="javax.persistence.jdbc.user" value="root" /> 
      <property name="javax.persistence.jdbc.password" value="pwd" /> 
      <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> 

      <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" /> 
      <property name="hibernate.show_sql" value="true" /> 
      <property name="hibernate.hbm2ddl.auto" value="update" /> 
     </properties> 

    </persistence-unit> 

</persistence> 

也将hibernate.hbm2ddl.auto从“更新”更改为“创建”例如不成功

P.S.

门票后面的@ManyToOne行&司机实体被评论为免除。但在这种情况下什么是错的。

在这个项目中,我有票< - > tickets_drivers < - >司机多对多的连接,我没有使用@ManyToMany,因为谷歌说,如果我有一个或多个额外的字段在连接表我必须使用@OneToMany两次。它可能是这个错误的原因?!

+0

为什么在错误与EclipseLink(一个不同的JPA提供程序)相关时为Hibernate标记问题? –

+0

是的,我已经删除它 – Nesquik27

+1

,为什么不删除所有的Hibernate配置和关于改变一些休眠属性的线?哦,和openJPA属性!然后将其标记为Eclipselink! –

回答

1

你的映射被搞砸了,可能是因为插入中间实体来代替ManyToMany关系。该错误提示没有“司机”,如果你看看你的tickets.driver映射,它使用的mappedBy:

@OneToMany(mappedBy = "driver", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private List<TicketsDrivers> driver; 

这说明TicketDrivers已司机关系回票价。它不,因为TicketDrivers.driver映射到驱动程序,因此是例外。这应该已被映射为“票证”:

@OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    private List<TicketsDrivers> driver; 

在Driver中也有同样的问题。 ID错误是不同的,并且由于上述错误导致实体处理不完整,或者由于它正在拾取与您发布的内容不同的类,因此发生错误。如果ID错误持续存在,请将其清除并发布新问题。

+0

我在创建类似实体时发生了同样的“复制/粘贴”错误,并忘记更改集合属性中的List <** Entity **>。 **必须定义非只读映射。**只是一个抵押品 – FiruzzZ