Крис Лерчер прокомментировал Примечание: Начиная с JPA 2.1, @Convert annotation can be used with an AttributeConverter<UUID, String>
.
Этот подход хорошо работает и совместим с любым поставщиком JPA, тогда как@Type(type = "uuid-char")
зависит от поставщика.Кроме того, autoApply=true
применяется к каждому полю каждого объекта, поэтому нет необходимости аннотировать каждое поле в каждом объекте.См. Документацию здесь и проверьте приведенный ниже пример:
Класс преобразователя
@Converter(autoApply = true)
public class UuidConverter implements AttributeConverter<UUID, String> {
@Override
public String convertToDatabaseColumn(final UUID entityValue) {
return ofNullable(entityValue)
.map(entityUuid -> entityUuid.toString())
.orElse(null);
}
@Override
public UUID convertToEntityAttribute(final String databaseValue) {
return ofNullable(databaseValue)
.map(databaseUuid -> UUID.fromString(databaseUuid))
.orElse(null);
}
}
Сущность
@Entity
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Long id;
@Column
private String name;
@Column(nullable = false, unique = true, updatable = false, columnDefinition="CHAR(36)")
private UUID customerId = randomUUID();
//.....
}
А вот так это выглядит в базе
TABLE customer
ID BIGINT(19) NO PRI (NEXT VALUE FOR SYSTEM_SEQUENCE_5D3)
NAME VARCHAR(255) YES NULL
CUSTOMER_ID VARCHAR(36) NO UNI NULL