【发布时间】:2019-02-06 01:44:22
【问题描述】:
查询:
INSERT INTO PERSON
(email, mobile, party_id, affiliate_id, eligibility, member_start_date, created_by, created_dt, first_name, last_name, google_connected)
values
('xxx@yyy.org', NULL, 123, '123', '1', NULL, NULL, '2018-8-30 21:45:56.859000 -6:0:0', 'xxx', 'yyy', '0')
ON CONFLICT (email)
DO UPDATE SET create_dt = '2018-8-30 21:45:56.859000 -6:0:0' where email = ?
当 LocalDate 值不为空时,它工作正常。仅当 LocalDate 值为 null 时才面临此问题。
即使在 PostgreSQL 转换之后,它也是一样的。
异常堆栈跟踪:
2018-08-30 21:10:48,372 -- [ERROR]-- 出现意外问题 与您的请求 org.postgresql.util.PSQLException: ERROR: column "member_start_date" 是 date 类型,但表达式是 bytea
提示:您将需要重写或强制转换表达式。职位:185 在 org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2182) 在 org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1911) 在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:173) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:645) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:495) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:380) 在 sun.reflect.GeneratedMethodAccessor98.invoke(Unknown Source) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 java.lang.reflect.Method.invoke(Method.java:498) 在 org.apache.tomcat.jdbc.pool.StatementFacade$StatementProxy.invoke(StatementFacade.java:114) 在 com.sun.proxy.$Proxy185.executeQuery(Unknown Source) 在 org.hibernate.engine.jdbc.internal.ResultSetReturnImpl.extract(ResultSetReturnImpl.java:70) ...省略了149个常用框架
实体:
@Entity(name = "person")
@EqualsAndHashCode(callSuper = false)
public class PersonEntity extends Audit {
@Id
@GeneratedValue
@Column(name = "person_id", columnDefinition = "uuid", updatable = false)
private UUID id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "email")
@NotNull
private String email;
@Column(name = "mobile")
private String mobile;
@Column(name = "party_id")
private Long partyId;
@Column(name = "affiliate_id")
private String affiliateId;
@Column(name = "eligibility")
@NotNull
private Boolean eligibility;
@Column(name = "member_start_date")
private LocalDate memberStartDate;
@Column(name = "google_connected")
private Boolean googleAccountConnected;
}
PostgreSQL 表定义;它缺少不重要的google_connected 列:
CREATE TABLE person
(
person_id UUID NOT NULL,
email VARCHAR(128) NOT NULL,
mobile VARCHAR(20),
party_id INTEGER,
affiliate_id VARCHAR(20),
eligibility BOOLEAN NOT NULL,
member_start_date DATE,
created_by VARCHAR(128) NOT NULL,
created_dt TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_by VARCHAR(128) DEFAULT NULL,
updated_dt TIMESTAMP NULL,
CONSTRAINT person_pk PRIMARY KEY ( person_id )
);
【问题讨论】:
-
可以分享一下你的实体类吗?
-
向我们展示 Postgres 中的表定义可能会有所帮助。
标签: java postgresql hibernate spring-data