我目前有大约 3 条来自 JMS 客户端的消息每隔几秒发送到 MDB。MDB 使用 JPA 实体管理器将数据持久保存到 PostgreSQL。这可以正常工作大约一分钟左右。
那么问题就变成了这个消息......
Caused by: javax.ejb.EJBException: Exception [EclipseLink-4002] (Eclipse Persistence
Services - 2.3.2.v20111125-r10461):org.eclipse.persistence.exceptions.DatabaseExcep
tion Internal Exception: org.postgresql.util.PSQLException: ERROR: duplicate key value
violates unique constraint "scan_pkey"
Detail: Key (id)=(984) already exists.
Error Code: 0
Call: INSERT INTO Scan (id, th, ag, dl) VALUES (?, ?, ?, ?
)
bind => [11 parameters bound]
这是我的扫描实体。
@Entity
@SequenceGenerator(name="scanIdGen", initialValue=1000, sequenceName="scan_seq")
@Table(name="Scan")
public class Scan implements Serializable {
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="scanIdGen")
private Integer id;
@Column(name="th")
private Integer th;
@Column(name="ag")
private Integer ag;
@Column(name="dl")
private Integer dl;
// ...
}
这是数据库模式。
CREATE SEQUENCE scan_seq START 1000;
CREATE TABLE Scan (
id INTEGER DEFAULT NEXTVAL('scan_seq') PRIMARY KEY
th INTEGER DEFAULT NULL,
ag INTEGER DEFAULT NULL,
dl INTEGER DEFAULT NULL
);
另一个看似不是那么大的问题是我的主键并不是真正从 1000 开始,而是通常从 950 开始。不知道为什么。
非常感谢任何帮助。