Java JPA表格“;顺序;不存在

Java JPA表格“;顺序;不存在,java,jpa,eclipselink,Java,Jpa,Eclipselink,数据库: user_account id(pk) email password ... user_detail id(pk fk) name_first name_last ... 实体 @Entity @Table(name="user_account") @SecondaryTable(name="user_detail", pkJoinColumns=@PrimaryKeyJoinColumn()) public class UserAccount implements Se

数据库:

user_account
id(pk)
email
password
...

user_detail
id(pk fk)
name_first
name_last
...
实体

@Entity
@Table(name="user_account")     
@SecondaryTable(name="user_detail", pkJoinColumns=@PrimaryKeyJoinColumn())
public class UserAccount implements Serializable{
    private static final long serialVersionUID = -2606506548742732094L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;
    private String email;
    private String password;
    private String tab;
    private String shortcut;
    private String setting;
    private Integer role;

    @Column(table="user_detail", name="name_first")
    private String nameFirst;
    @Column(table="user_detail", name="name_last")
    private String nameLast;
    @Column(table="user_detail")
    private String occupation;
    @Column(table="user_detail")
    @Temporal(TemporalType.DATE)
    private Date birth;
    ....
}
行动

    try{
        EntityTransaction transaction = em.getTransaction();
        transaction.begin();
        em.persist(currentUser);

        transaction.commit();
    } catch (Exception e){
    }
错误

信息:[EL警告]:2012-01-06 18:45:46.77——客户端会话(17472935)——异常[EclipseLink-4002] (Eclipse持久性服务-2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException内部 异常:com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表 “mazedb.sequence”不存在错误代码:1146调用:更新序列 设置顺序计数=顺序计数+?其中SEQ_NAME=?绑定=>[2] 参数绑定]查询:DataModifyQuery(name=“SEQUENCE”sql=“UPDATE 序列集SEQ_COUNT=SEQ_COUNT+?其中SEQ_NAME=?“”)

信息:错误:内部异常: com.mysql.jdbc.exceptions.MySQLSyntaxErrorException:表 “mazedb.sequence”不存在错误代码:1146调用:更新序列 设置顺序计数=顺序计数+?其中SEQ_NAME=?绑定=>[2] 参数绑定]查询:DataModifyQuery(name=“SEQUENCE”sql=“UPDATE 序列集SEQ_COUNT=SEQ_COUNT+?其中SEQ_NAME=?“”)


我尝试了另一种方法,让@PrimaryKeyJoinColumn合并两个不同的实体,但我得到了相同的错误。

如果EclipseLink试图访问此表,这意味着它应该在那里
GenerationType.AUTO
意味着EclipseLink为您的数据库(MySQL)选择最合适的生成类型。在这种情况下,可以选择使用基于表的生成器,它需要一个表。看


如果您不想使用这种策略,请选择另一种。

尽管我做过一百次这种事情,但我以前从未遇到过这种错误。我发现此错误是因为我在
persistence.xml
中创建表时使用了hibernate属性,但使用的是EclipseLink:

它是:

    <property name="hibernate.hbm2ddl.auto" value="create"/>

我更改为以下内容以修复错误:

    <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/>
    <!-- or just value="create-tables" -->

在配置文件中,
org.hibernate.dialent.oracle10galent
行可以忽略。实际上,
org.hibernate.dialogue.mysqldialogue
应该是。

@GeneratedValue(strategy=GenerationType.AUTO)
看起来像IDE在实体创建时提供的默认值。但是,如果您使用的是
org.eclipse.persistence.jpa.PersistenceProvider
,考虑到它处理此注释的方式(导致引发异常),
最简单的解决方案是只使用
@GeneratedValue(strategy=GenerationType.IDENTITY)

即使使用
@GeneratedValue(strategy=GenerationType.IDENTITY)
,也会发生此异常

从:

注意:标识策略是特定于数据库的,并非所有数据库都支持。Sybase、DB2、SQL Server、MySQL、Derby、JavaDB、Informix、SQLAnywhere、H2、HSQL、Access和Postgres数据库支持标识

如上所述,我将数据库服务器和客户端从MySQL更改为MariaDB,这是GenerationType.IDENTITY不支持的。 因此,我必须将以下属性添加到
persistence.xml

<persistence ...
  <persistence-unit ...
  ...
  <properties>
    <property name="eclipselink.target-database" value="MySQL"/>
  </properties>
  ...

消息说您需要一个序列表。为什么不创建它呢?但是如果不应该有这个表,为什么我需要它呢?这对我来说很有用,尽管我没有在persistence.xml中定义第一个属性。添加suggest属性消除了异常。给定的链接已失效。我必须创建表以节省其他人的谷歌搜索时间。下面是SQL
创建表序列(SEQ_NAME VARCHAR(50)NOT NULL,SEQ_COUNT DECIMAL(15),主键(SEQ_NAME))