Tenho uma tabela MySQL que armazena informações sobre impressoras de etiquetas:
ip | porta | apelido |
---|---|---|
181012304 | 9100 | PRLMA213 |
181012370 | 9100 | PRLMA212 |
181012398 | 9100 | PRLMA211 |
181012559 | 9100 | PRLMA210 |
Há uma entidade JPA correspondente para esta tabela em meu aplicativo:
@Entity
@Table(name = "printers", catalog = "gage_requests")
public class PrinterEntity {
@Id
@Column(name = "ip")
@ColumnTransformer(read = "INET_NTOA(ip)", write = "INET_ATON(?)")
private String address;
private int port;
private String nickname;
public String getAddress() {
return this.address;
}
public int getPort() {
return this.port;
}
public String getNickname() {
return this.nickname;
}
}
Quando tento CriteriaQuery
recuperar a lista de impressoras, o endereço IP não é convertido corretamente e continua sendo um número inteiro:
public List<PrinterEntity> findPrinters() {
CriteriaBuilder criteriaBuilder = this.entityManager.getCriteriaBuilder();
CriteriaQuery<PrinterEntity> criteriaQuery = criteriaBuilder.createQuery(PrinterEntity.class);
Root<PrinterEntity> root = criteriaQuery.from(PrinterEntity.class);
criteriaQuery.select(root);
TypedQuery<PrinterEntity> query = this.entityManager.createQuery(criteriaQuery);
return query.getResultStream().peek(this.entityManager::detach)
.collect(Collectors.toCollection(LinkedList::new));
}
Lista retornada:
[
{
"address": "181012304",
"nickname": "PRLMA213",
"port": 9100
},
{
"address": "181012370",
"nickname": "PRLMA212",
"port": 9100
},
{
"address": "181012398",
"nickname": "PRLMA211",
"port": 9100
},
{
"address": "181012559",
"nickname": "PRLMA210",
"port": 9100
}
]
Quando hibernate.show_sql
definido como verdadeiro, o seguinte SQL é registrado:
select printerent0_.ip as ip1_5_, printerent0_.nickname as nickname2_5_, printerent0_.port as port3_5_ from gage_requests.printers printerent0_
Claramente está faltando a INET_NTOA
função usada na minha @ColumnTransformer
anotação, então parece que a anotação não está sendo aplicada.
Por que isso acontece?