Java hibernate with Postgres:ids的未知整型数据类型
我有一个带有Id序列的postgres表Java hibernate with Postgres:ids的未知整型数据类型,java,postgresql,hibernate,sequential,Java,Postgresql,Hibernate,Sequential,我有一个带有Id序列的postgres表 CREATE SEQUENCE AGENT_SEQU; CREATE TABLE AGENT ( AGENT_ID CHAR(10) PRIMARY KEY DEFAULT 'AGT'||to_char(nextval('AGENT_SEQU'), 'FM000000'), FIRSTNAME VARCHAR(60) NOT NULL, LASTNAME VARCHAR(60) NOT NULL, ) ;
CREATE SEQUENCE AGENT_SEQU;
CREATE TABLE AGENT (
AGENT_ID CHAR(10) PRIMARY KEY DEFAULT 'AGT'||to_char(nextval('AGENT_SEQU'), 'FM000000'),
FIRSTNAME VARCHAR(60) NOT NULL,
LASTNAME VARCHAR(60) NOT NULL,
) ;
ALTER SEQUENCE AGENT_SEQU OWNED BY AGENT.AGENT_ID;
这个序列的思想是,对于每个插入,我都会得到一个类似“AGT000002”的Id,并且可以与sql插入完美配合。
我还有一个这样的代理实体
@Entity
@Table (name = "AGENT")
@Data
public class AgentEntity {
@Id
@SequenceGenerator(name="pk_sequence", sequenceName="AGENT_SEQU", allocationSize=1)
@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="pk_sequence")
@Column(name = "AGENT_ID")
private String id;
@Column(name = "FIRSTNAME")
private String firstName;
@Column(name = "LASTNAME")
private String lastName;
}
当我尝试保存实体时,出现以下异常:
org.hibernate.id.IdentifierGenerationException: Unknown integral data type for ids : java.lang.String
at org.hibernate.id.IdentifierGeneratorHelper.getIntegralDataTypeHolder(IdentifierGeneratorHelper.java:224) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.id.enhanced.SequenceStructure$1.getNextValue(SequenceStructure.java:98) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.id.enhanced.NoopOptimizer.generate(NoopOptimizer.java:40) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.id.enhanced.SequenceStyleGenerator.generate(SequenceStyleGenerator.java:520) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:120) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:192) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:135) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:62) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.event.service.internal.EventListenerGroupImpl.fireEventOnEachListener(EventListenerGroupImpl.java:108) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:702) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:688) ~[hibernate-core-5.4.8.Final.jar:5.4.8.Final]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.springframework.orm.jpa.ExtendedEntityManagerCreator$ExtendedEntityManagerInvocationHandler.invoke(ExtendedEntityManagerCreator.java:368) ~[spring-orm-5.2.1.RELEASE.jar:5.2.1.RELEASE]
at com.sun.proxy.$Proxy111.persist(Unknown Source) ~[na:na]
当我从代理选择下一个序列时,我得到一个数字,仅供参考。
有什么想法吗?如果您将列代理ID更改为varchar,是否有效?我将尝试将列转换为VARCHAR@InsertKnowledge不,我也有同样的错误,也许Hibernate假设ID总是数字。(顺便说一句:使用
char()
与varchar
或text
相比没有任何优势)