Java jpa必须为序列号字段定义非只读映射

Java jpa必须为序列号字段定义非只读映射,java,mysql,jpa,jakarta-ee,eclipselink,Java,Mysql,Jpa,Jakarta Ee,Eclipselink,不幸的是,在这种情况下,附加的实体名、模式名不起作用。我不明白这个解释的描述。这意味着什么 异常[EclipseLink-93](Eclipse持久性服务- 2.6.4.限定符):org.eclipse.persistence.exceptions.DescriptorException异常 描述:此描述符中不存在表[drivers]。 描述符:RelationalDescriptor(com.spring\u test2.jpa.models.Tickets -->[数据库表(票据)]) 异常

不幸的是,在这种情况下,附加的实体名、模式名不起作用。我不明白这个解释的描述。这意味着什么

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

2.6.4.限定符):org.eclipse.persistence.exceptions.DescriptorException异常 描述:此描述符中不存在表[drivers]。 描述符:RelationalDescriptor(com.spring\u test2.jpa.models.Tickets -->[数据库表(票据)])

异常[EclipseLink-93](Eclipse持久性服务)- 2.6.4.限定符):org.eclipse.persistence.exceptions.DescriptorException异常 描述:此描述符中不存在表[tickets]。 描述符:RelationalDescriptor(com.spring\u test2.jpa.models.Drivers -->[数据库表(驱动程序)])

异常[EclipseLink-41](Eclipse持久性服务)- 2.6.4.限定符):org.eclipse.persistence.exceptions.DescriptorException异常 说明:必须为序列定义非只读映射 数字字段。描述符: RelationalDescriptor(com.spring\u test2.jpa.models.Tickets--> [数据库表(票据)])

异常[EclipseLink-41](Eclipse持久性服务)- 2.6.4.限定符):org.eclipse.persistence.exceptions.DescriptorException异常 说明:必须为序列定义非只读映射 数字字段。描述符: RelationalDescriptor(com.spring_test2.jpa.models.Drivers--> [数据库表(驱动程序)])

在我的实体中没有什么特别的东西是我找不到的,它们已经被我很好地测试过了

@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
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>

Maven测试JPA
com.spring_test2.jpa.models.Test
com.spring_test2.jpa.models.Cities
com.spring_test2.jpa.models.Countries
com.spring_test2.jpa.models.Admins
com.spring_test2.jpa.models.dictionaries.ticketstatus
com.spring_test2.jpa.models.dictionary.StaticPages
com.spring_test2.jpa.models.dictionaries.Sources
com.spring_test2.jpa.models.dictionary.Roles
com.spring_test2.jpa.models.dictionaries.ProfileTypes
com.spring_test2.jpa.models.dictionaries.Partners
com.spring_test2.jpa.models.dictionaries.Newsletter
com.spring_test2.jpa.models.dictionary.driverstatus
com.spring_test2.jpa.models.Auto
com.spring_test2.jpa.models.Drivers
com.spring_test2.jpa.models.models
com.spring_test2.jpa.models.Profiles
com.spring_test2.jpa.models.Tickets
com.spring_test2.jpa.models.TicketsDrivers
com.spring_test2.jpa.models.underroundlines
com.spring_test2.jpa.models.underroundStations
例如,将hibernate.hbm2ddl.auto从“更新”更改为“创建”也没有成功

附言

在票证和司机实体中的@manytone行被注释后,一个例外项消失了。但是在这种情况下有什么不对呢


在这个项目中,我有票证、司机、司机、多对多连接,我没有使用@manytomy,因为谷歌说,如果我在连接表中有一个或多个附加字段,我必须使用@OneToMany两次。这可能是这个错误的原因吗

您的映射混乱不堪,可能是因为插入了一个中间实体来代替多个关系。该错误表示没有“驱动程序”,如果查看票证。驱动程序映射,它将使用以下的mappedby:

@OneToMany(mappedBy = "driver", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<TicketsDrivers> driver;
@OneToMany(mappedBy=“driver”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私有列表驱动程序;
这表明TicketDrivers与Tickets之间存在驱动关系。它没有,因为TicketDrivers.driver映射到驱动程序,因此例外。这应该由“票证”映射:

@OneToMany(mappedBy=“ticket”,cascade=CascadeType.ALL,fetch=FetchType.EAGER)
私有列表驱动程序;

驱动程序中也存在同样的问题。ID的错误不同,可能是因为上述错误导致实体处理不完整,也可能是因为它拾取的类与您发布的类不同。如果IDs上的错误仍然存在,请清除它们并发布一个新问题。

当错误与EclipseLink(另一个JPA提供商)相关时,为什么要对Hibernate添加一个问题?!是的,我已经删除了它,为什么不删除所有的Hibernate配置和关于更改某些Hibernate属性的行呢?哦,还有openJPA属性!然后将其标记为Eclipselink!添加了标记,我删除了这些行,它们是从另一个项目复制粘贴的。很难想象这样混乱(混合)注释/配置的行为。我在创建类似实体时出现了相同的“复制/粘贴”错误,并且忘记更改集合属性中的列表。必须定义非只读映射。。只是一个抵押品
<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>
@OneToMany(mappedBy = "driver", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<TicketsDrivers> driver;
@OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private List<TicketsDrivers> driver;