Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

408
Vistas
Cómo envolver la anotación @Column con mi propia anotación en Java o Kotlin

Simplemente quiero tener mi propia anotación para limpiar la masa de anotaciones y poder cambiarlas fácilmente cuando quiera;

 import javax.persistence.Column import javax.validation.constraints.Size class Foo(){ @Column(name="bar_", nullable = false, length = 32) @Size(min = 32, max = 32) String bar; @Column(nullable = false, length = 32) @Size(min = 32, max = 32) String bas; @Column(nullable = false, length = 32, unique=true) @Size(min = 32, max = 32) String baq; }

Ojala pudiera

 class Foo(){ @MyColumn(name="bar_") String bar; @MyColumn String bas; @MyColumn(unique=true) String baq; }

nullable = false, length = 32 son los parámetros predeterminados.

Las soluciones Java o Kotlin son bienvenidas.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Dado que está utilizando anotaciones de terceros importadas de javax la mejor opción es introducir una anotación compuesta. (Kotlin no admite la herencia de anotaciones.

 @Column(name = "bar_", nullable = false, length = 32) @Size(min = 32, max = 32) annotation class Anno

Spring Boot está haciendo un trabajo bastante bueno al combinar toneladas de anotaciones de configuración todas juntas: échale un vistazo .

Hay un problema con la anotación compuesta Anno , aunque. Debe proporcionar parámetros de anotación con valores constantes.

Si está seguro, necesita una anotación parametrizada como

 @Column(...) @Size(min = Anno.max, max = Anno.min) annotation class Anno(val min: Int, val max: Int)

eche un vistazo a los complementos Kapt o Kotlin Compiler, necesitará una pieza de generación de código.

Con el complemento del compilador Kapt o Kotlin, solo necesitará anular un método newField de su ClassBuilder personalizado:

 override fun newField( origin: JvmDeclarationOrigin, access: Int, name: String, desc: String, signature: String?, value: Any? ): FieldVisitor { // if field is annotated with Anno -- add two custom annotation with parameters of your choice // otherwise perform a standard field init }

Y luego registrarlo con

 class AnnoRegister : ComponentRegistrar { override fun registerProjectComponents( project: MockProject, configuration: CompilerConfiguration ) { ... }

Debería ser relativamente fácil integrar este procesamiento en un proyecto gradle o maven existente, o simplemente pasar a kotlinc .

over 4 years ago · Santiago Trujillo Denunciar

0

Para el tamaño que podrías usar

 @Size(min = 32, max = 32) @Inherited annotation class DefaultSize()

Sin embargo, tener parámetros dinámicos para el super, como el name en @Column , complica un poco las cosas. Creo que necesita algún tipo de modificaciones de anotación en tiempo de ejecución para eso, consulte Cambio de parámetros de anotación en tiempo de ejecución

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda