spring-projects / spring-projects/spring-data-relational
Saving a `null` Postgres enum results in a varchar value
@schauder is already working on this.
Since Nov 11, 2024.
- Dominant language
- Java
- Stars
- 827
- Forks
- 394
- PR merge metrics
- No merged PRs in 30d
Description
Hi, I have an issue with enums using spring-data-jdbc.
I have a Java enum type:
public enum Sentiment {
POSITIVE,
NEGATIVE,
NEUTRAL
}
And a corresponding enum type on one of my tables:
insights=> \dT+ sentiment
List of data types
Schema | Name | Internal name | Size | Elements | Owner | Access privileges | Description
--------+-----------+---------------+------+----------+-------------+-------------------+-------------
public | sentiment | sentiment | 4 | POSITIVE+| owner | |
| | | | NEGATIVE+| | |
| | | | NEUTRAL | | |
(1 row)
I have this Entity (see the Sentiment field):
@Table("responses")
public record Response(
@Id UUID id,
UUID roundId,
UUID cardTemplateId,
UUID cardId,
UUID answerOptionTemplateId,
UUID answerOptionId,
String text,
Sentiment sentiment) {}
If I call save on the repository:
responseRepository.save(new RoundResponse(Id, roundId, UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), UUID.randomUUID(), "text", null)); // sentiment is null
I get the error:
Caused by: org.postgresql.util.PSQLException: ERROR: column "sentiment" is of type sentiment but expression is of type character varying
I have some Converters for handling the enums but because the value is null it doesn't reach these converters. It seems to me that the spring-data-jdbc library must be at some point trying to convert the null value to a varchar? (maybe by default?)
This is not what I would expect, I would expect if the value I am inserting is null and my enum type postgres field is nullable then null should be used rather than varchar :)
Let me know if you need any more information, thank you!
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.