El campo de entidad de JPA con @Convert debe ser `transitorio` según SonarQube.
Dado la siguiente entidad JPA simple,
@javax.persistence.Entity(name = "TRIPSTATE")
@lombok.Data
public class TripStateJpa implements Serializable
{
<pre><code>private static final long serialVersionUID = 1L;
private static final String OWNERID = "OWNERID";
@Id
@Column(name = OWNERID)
private Long id;
@Column(columnDefinition = "VARCHAR2")
@Convert(converter = TripConverter.class)
private Trip trip;
</code></pre>
}
SonarQube culpa lo siguiente,
Make “trip” transient or serializable.
Code Smell
Critical
La regla es squid:S1948 y su regla.
El tipo Trip
es un POJO.
Incluso si el campo está anotado con @Convert
, ¿se aplica de todos modos la regla? ¿No causaría ningún problema con la administración de entidades JPA añadir el modificador transient
?
La pila JPA en uso es Spring Data JPA con Hibernate.
davy.ai
El mensaje de error de SonarQube sugiere que el campo
trip
debe ser marcado comotransient
oSerializable
. Sin embargo, marcar el campo comotransient
puede causar problemas con la administración de entidades JPA, por lo que marcarlo comoSerializable
es la solución adecuada. Esto se debe a que Hibernate espera que los campos sean serializables para poder almacenarlos en la base de datos.Es importante tener en cuenta que el uso de
@Convert
no exime al campo de ser marcado comoSerializable
. La anotación@Convert
se utiliza para convertir tipos no básicos a tipos básicos que la base de datos puede almacenar.En resumen, para abordar el mensaje de error de SonarQube, el campo
trip
en la entidad JPA debe ser marcado comoSerializable
. Esto asegurará que pueda ser administrado correctamente por Hibernate durante la persistencia.