Open
Description
The custom mapping of an enum to database column values is not functioning as expected.
Entity:
@Entity
public class Ticket {
@Id
private int id;
private String name;
@Enumerated(EnumType.ORDINAL)
private TicketStatus status;
@Enumerated(EnumType.STRING)
private Priority priority;
public static Ticket of(int id, String name, TicketStatus status, Priority priority) {
Ticket ticket = new Ticket();
ticket.setId(id);
ticket.setName(name);
ticket.setStatus(status);
ticket.setPriority(priority);
return ticket;
}
// getters and setters .....
}
Enum TicketStatus:
public enum TicketStatus {
OPEN(1), CLOSED(2), CANCELLED(-1);
@EnumeratedValue
final int intValue;
TicketStatus(int value) {
this.intValue = value;
}
public int getIntValue() {
return intValue;
}
}
Enum Priority:
public enum Priority {
HIGH("H"), MEDIUM("M"), LOW("L");
@EnumeratedValue
final String value;
Priority(String value) {
this.value = value;
}
}
Persistence code
Ticket ticket1 = Ticket.of(1, "ticket1", TicketStatus.OPEN, Priority.HIGH);
Ticket ticket2 = Ticket.of(2, "ticket2", TicketStatus.CLOSED, Priority.LOW);
Ticket ticket3 = Ticket.of(3, "ticket3", TicketStatus.CANCELLED, Priority.MEDIUM);
tx.begin();
em.persist(ticket1);
em.persist(ticket2);
em.persist(ticket3);
tx.commit();
Persistence Logs:
[6/10/25, 17:14:09:447 IST] 00000057 id=00000000 eclipselink.sql 3 [eclipselink.sql] INSERT INTO TICKET (ID, NAME, PRIORITY, STATUS) VALUES (?, ?, ?, ?)
bind => [2, ticket2, LOW, 1]
[6/10/25, 17:14:09:448 IST] 00000057 id=00000000 eclipselink.query 3 [eclipselink.query] Execute query InsertObjectQuery(id=1 name=ticket1 status=OPEN priority=HIGH)
[6/10/25, 17:14:09:448 IST] 00000057 id=00000000 eclipselink.sql 3 [eclipselink.sql] INSERT INTO TICKET (ID, NAME, PRIORITY, STATUS) VALUES (?, ?, ?, ?)
bind => [1, ticket1, HIGH, 0]
[6/10/25, 17:14:09:449 IST] 00000057 id=00000000 eclipselink.query 3 [eclipselink.query] Execute query InsertObjectQuery(id=3 name=ticket3 status=CANCELLED priority=MEDIUM)
[6/10/25, 17:14:09:449 IST] 00000057 id=00000000 eclipselink.sql 3 [eclipselink.sql] INSERT INTO TICKET (ID, NAME, PRIORITY, STATUS) VALUES (?, ?, ?, ?)
bind => [3, ticket3, MEDIUM, 2]
Create Table Query
CREATE TABLE TICKET (ID INTEGER NOT NULL, NAME VARCHAR(255), PRIORITY VARCHAR(255), STATUS INTEGER, PRIMARY KEY (ID))
Expecting the enum Priority.LOW to be mapped to the database column value 'L' and TicketStatus.CLOSED to be mapped to the database column value 2, with similar behaviour observed for other enum fields as well.
Metadata
Metadata
Assignees
Labels
No labels