嘗試使用 @TableGenerator 作為我的主鍵,通常我使用 Auto 但發現這可能不是一個好主意(使用:Jakarta EE 10 Payara 6,PostgreSQL 13)。我想知道這是否是某個地方的錯誤,因為錯誤狀態列“seq_name”丟失,除非我使用的示例不正確,否則不應該有該名稱的列?
任何人都可以為我闡明這個問題嗎?
@Id
@Column(name="userRoleID")
@TableGenerator(name = "role_generation",
table = "id_generation",
pkColumnValue = "gen_name",
valueColumnName = "gen_val")
@GeneratedValue(generator = "role_generation")
private long userRoleID;
CREATE TABLE id_generation(gen_name varchar(80), gen_val INTEGER, CONSTRAINT pk_id_generation primary key(gen_name));
來自persistance.xml
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="eclipselink.target-database" value="PostgreSQL"/>
<property name="eclipselink.ddl-generation" value="create-tables"/>
<property name="eclipselink.ddl-generation.output-mode" value="database"/>
<property name="jakarta.persistence.schema-generation.database.action" value="create"/>
</properties>
來自payara日志的錯誤
Local Exception Stack:
Exception [EclipseLink-4002] (Eclipse Persistence Services - 4.0.0-M3.payara-p1.v202206011138): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "seq_name" does not exist
Hint: Perhaps you meant to reference the column "id_generation.gen_name".
Position: 55
Error Code: 0
Call: UPDATE id_generation SET gen_val = gen_val ? WHERE SEQ_NAME = ?
bind => [2 parameters bound]
Query: DataModifyQuery(name="gen_name" sql="UPDATE id_generation SET gen_val = gen_val ? WHERE SEQ_NAME = ?")
uj5u.com熱心網友回復:
所以通過一些試驗和錯誤我解決了它,我的例子是不正確的,這就是我讓它按我想要的方式作業的方式。
@Column(name="userRoleID")
@TableGenerator(name = "role_generation",
table = "id_generation",
pkColumnName = "class_generation",
pkColumnValue = "role_generation",
valueColumnName = "gen_val")
@GeneratedValue(generator = "role_generation")
private long userRoleID;
資料庫表(PostgreSQL)看起來像這樣
class_generation | gen_val
role_generation | 50
我希望這對將來的人有所幫助
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/515691.html
