UUID列中的java空值
我使用EclipseLink+PostgreSQL
我需要用UUID(不是主键)字段的空值创建实体
这是我的实体,在某些情况下,idUser字段必须为空:
@Entity
@Table(schema = "bd00", name = "t_bd00_messages")
public class TBd00Messages implements Serializable {
@Id
@Column(name = "id")
@Getter @Setter
private UUID id;
@Getter @Setter
private String cdoc;
@Getter @Setter
private String receiver;
@Getter @Setter
private String message;
@Column(name = "status")
@Getter @Setter
private Integer statusCode;
@Temporal(TemporalType.TIMESTAMP)
@Getter @Setter
private Date tstmp;
@Column(name = "d_send")
@Temporal(TemporalType.TIMESTAMP)
@Getter @Setter
private Date dSend;
@Column(name = "id_user")
@Getter @Setter
private UUID idUser;
@Getter @Setter
private String subject;
当我持久化对象时,其中idUser=null-a有一个异常:
Internal Exception: org.postgresql.util.PSQLException: ERROR: column "id_user" is of type uuid but expression is of type character varying
Hint: You will need to rewrite or cast the expression.
Position: 125
Error Code: 0
Call: INSERT INTO bd00.t_bd00_messages (id, CDOC, d_send, id_user, MESSAGE, RECEIVER, status, SUBJECT, TSTMP) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
bind => [********, *******, 2016-07-21 14:35:40.858, null, ......
# 1 楼答案
对于基本映射,EclipseLink只需传入null值并让驱动程序进行转换,这显然不能用于UUID null
要解决这个问题,您需要告诉EclipseLink如何为驱动程序指定类型,如本文https://stackoverflow.com/a/15084881/496099所示 关键部分是调用
在映射中使用的字段上
# 2 楼答案
这将允许您在指定列中插入空值