我有一個應用程序使用JPA(與eclipselink)。該應用程序是在後臺使用Derby數據庫開發的。這些表格由JPA自己生成。這是實體中的一個的簡單的例子:爲什麼GenerationType.AUTO不在PostgreSQL上使用串行?
public class MyEntity implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column(nullable=false)
private String someString;
}
JPA然後創建另一個表SEQUENCE
以生成的ID。 我們現在想要切換到PostgreSQL,而不是表SEQUENCE
,我們希望在PostgreSQL中使用真實序列。這是我們用來創建表的DDL:
CREATE TABLE MYENTITY (
ID serial PRIMARY KEY NOT NULL,
SOMESTRING varchar(255) NOT NULL
)
但還是JPA要使用SEQUENCE
表(不存在):
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.5.2.v20140319-9ad6abd): org.eclipse. persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: relation "sequence" does not exist
Position: 8
Error Code: 0
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 = ? ")
我知道,我可以改變一代戰略SEQUENCE
,但我想要的代碼便攜。 GenerationType.SEQUENCE
不適用於不支持序列的數據庫。我期望AUTO
會在PostgreSQL上使用一個序列。爲什麼不呢?我還需要做點別的嗎?
作爲說明,似乎JPA在問題Generated Value in Postgres中自動使用了一個序列。