Java JPA EclipseLink数据库异常:';表foo.SEQUENCE不';不存在';
我已经更新了问题,以便两个表现在都使用自动增量。持久化到Java JPA EclipseLink数据库异常:';表foo.SEQUENCE不';不存在';,java,mysql,database-design,jpa,orm,Java,Mysql,Database Design,Jpa,Orm,我已经更新了问题,以便两个表现在都使用自动增量。持久化到MESSAGES表的问题可能是数据库模式的问题吗 在尝试将MessageBean保持为这样时: private void persist(MessageBean messageBean) throws Exception { LOG.info("loading.." + messageBean); Messages message = new Messages(messageBean); emf = Persis
MESSAGES
表的问题可能是数据库模式的问题吗
在尝试将MessageBean保持为这样时:
private void persist(MessageBean messageBean) throws Exception {
LOG.info("loading.." + messageBean);
Messages message = new Messages(messageBean);
emf = Persistence.createEntityManagerFactory("USENETPU");
em = emf.createEntityManager();
em.getTransaction().begin();
em.persist(message);
em.getTransaction().commit();
}
堆栈跟踪:
run:
Jul 27, 2012 3:04:06 PM net.bounceme.dur.usenet.controller.CommentsDefaultListModel persist
INFO: loading..floor installer (cultas lake)
[EL Info]: 2012-07-27 15:04:10.006--ServerSession(30409723)--EclipseLink, version: Eclipse Persistence Services - 2.3.0.v20110604-r9504
[EL Info]: 2012-07-27 15:04:11.78--ServerSession(30409723)--file:/home/thufir/NetBeansProjects/USENET/build/classes/_USENETPU login successful
[EL Warning]: 2012-07-27 15:04:12.072--ClientSession(29574192)--Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'nntp.SEQUENCE' doesn't exist
Error Code: 1146
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [2 parameters bound]
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
Jul 27, 2012 3:04:12 PM net.bounceme.dur.usenet.controller.CommentsDefaultListModel <init>
SEVERE: null
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'nntp.SEQUENCE' doesn't exist
Error Code: 1146
Call: UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?
bind => [2 parameters bound]
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
at org.eclipse.persistence.exceptions.DatabaseException.sqlException(DatabaseException.java:324)
以及消息的字段:
package net.bounceme.dur.usenet.controller;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
@Entity
@Table(name = "messages", catalog = "nntp", schema = "")
@XmlRootElement
@NamedQueries({
@NamedQuery(name = "Messages.findAll", query = "SELECT m FROM Messages m"),
@NamedQuery(name = "Messages.findById", query = "SELECT m FROM Messages m WHERE m.id = :id")})
public class Messages implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "id", nullable = false)
@GeneratedValue
private Integer id;
@Basic(optional = false)
@Lob
@Column(name = "newsgroup", nullable = false, length = 65535)
private String newsgroup;
@Basic(optional = false)
@Lob
@Column(name = "subject", nullable = false, length = 65535)
private String subject;
@Basic(optional = false)
@Lob
@Column(name = "content", nullable = false, length = 65535)
private String content;
@Basic(optional = false)
@Lob
@Column(name = "number", nullable = false, length = 65535)
private String number;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "messageId")
private Collection<Comments> commentsCollection;
public Messages() {
}
对于
mysql
我建议您:
在您的表格消息
字段id
添加声明自动增量
:
create table messages(
...
id int not null auto_increment,
...
primary key (id)
)
在实体声明中使用
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
这与JPA使用MySQL的自动增量特性有关
如果不适用(例如,您可能希望在同一事务中创建相关的另一个实体),请使用表策略(有关更多详细信息,请参阅)如果您的数据库支持自动策略,则自动策略是本机的别名;如果您的数据库支持自动策略,则自动策略是序列;如果您的数据库不支持任何这些策略,则自动策略是表 因此,如果数据库不支持NATIVE和SEQUENCE,则需要创建EclipseLink用于生成ID的表
对于MySQL,应该支持本机。不过,您需要将ID列设置为自动增量列。还要确保配置适当的属性。对于定义多个实体id值的抽象类,情况如何?你愿意帮我解决类似的问题吗?以下是链接:@CodeMed,很抱歉无法及时看到您的评论。非常感谢您的帮助。我现在似乎犯了很多休眠错误。我还有一个错误一直存在,尽管有人一直试图给我帮助。你愿意帮我解决这个新问题吗?下面是链接:对于定义多个实体id值的抽象类,情况如何?你愿意帮我解决类似的问题吗?以下是链接:
create table messages(
...
id int not null auto_increment,
...
primary key (id)
)
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;