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

266
Vistas
¿El parámetro "opcional" de @ManyToOne se configura automáticamente usando la nulabilidad de Kotlin?

Leí que especificar optional = false en la anotación de asociación @ManyToOne podría ayudar a Spring a mejorar el rendimiento de las consultas.

En una entidad de clase de datos de Kotlin, ¿realmente necesito especificar el parámetro en la anotación, o Spring puede resolver esto por sí mismo usando la nulabilidad del campo del item ?

Por ejemplo, si tengo la siguiente declaración:

 @Entity @Table(name = ACCESS_LOGS_ARCHIVES_TABLE, indexes = [ Index(name = "access_logs_archives_item_idx", columnList = "access_item_id") ]) data class AccessLogArchive( val date: LocalDate, @ManyToOne(optional = false) @JoinColumn(name = "access_item_id", nullable = false) val item: AccessLogItem, val occurrences: Int ) { @Id @GeneratedValue var id: Long? = null } @Entity @Table(name = ACCESS_ITEMS_TABLE) data class AccessLogItem( @Column(length = 3) val code: String, @Column(columnDefinition = "text") val path: String, @Column(length = 10) val verb: String ) { @Id @GeneratedValue var id: Long? = null }

En este caso, por ejemplo, esperaría que Spring supiera que el campo del item no admite valores NULL y, por lo tanto, la relación debe entenderse como optional=false , incluso sin especificarlo como lo hice yo. ¿Es este el caso?

La misma pregunta se aplica a @JoinColumn 's nullable nullable = false , por cierto.

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

0

Considere una entidad simple como Room que tiene una relación @ManyToOne con House .

 @Entity class Room( @ManyToOne(optional = true) val house: House ) { @Id @GeneratedValue(strategy = GenerationType.AUTO) val id: Long = 0 }

JPA creará una mesa de sala con una columna.

 `house_id` bigint(20) DEFAULT NULL

Si especifica @ManyToOne(optional = false)

la columna se verá así:

 `house_id` bigint(20) NOT NULL

Al especificar opcional, le dice a JPA cómo se debe generar el esquema, si la columna puede ser NULL o no.

En el tiempo de ejecución, intentar cargar una Room sin una House provocará una excepción si la propiedad de la casa no admite valores NULL (¿ House en lugar de House? ), incluso cuando el valor de optional es true .

Lo mismo se aplica a @JoinColumn .

¿El parámetro "opcional" de @ManyToOne se configura automáticamente usando la nulabilidad de Kotlin?

No, no es. Es independiente de eso y por defecto se establece en true .

Conclusión: para que su esquema refleje sus entidades, es una buena idea usar optional = true si la propiedad de la casa sería anulable y optional = false si la propiedad de la casa no fuera anulable.

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