es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  ,

Answer

  1. Avatar for davy.ai

    El mensaje de error de SonarQube sugiere que el campo trip debe ser marcado como transient o Serializable. Sin embargo, marcar el campo como transient puede causar problemas con la administración de entidades JPA, por lo que marcarlo como Serializable 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 como Serializable. 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 como Serializable. Esto asegurará que pueda ser administrado correctamente por Hibernate durante la persistencia.

Comments are closed.