objectbox / objectbox/objectbox-java

Support Kotlin inline classes for ids

Ouverte
#706 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

enhancement
Langage dominant
Java
Étoiles
4.6k
Forks
311
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

Inline classes are a good way to add compile time type safety to database queries. They would prevent error caused by querying a box with the wrong id type.

@Entity
data class EntityA(
    val str: String,
    val id: EntityAId
)

inline class EntityAId(val value: Long)

@Entity
data class EntityB(
    val str: String,
    val id: EntityBId
)

inline class EntityBId(val value: Long)

val unsafeId: Long = getSomeId() //returns an id meant for EntityA
boxStore.boxFor<EntityB>()[unsafeId] //Runtime error

val safeId: EntityAId = getSomeId()
boxStore.boxFor<EntityB>()[safeId] //Compile time error

And the unsafe call only crashes if you're lucky, other times it might just seem like the database is returning garbage data, since you queried it with the wrong ids.

Guide de contribution

Aucun guide de contribution indexé pour ce dépôt

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Commencez par les exemples Kotlin utilisant des inline classes telles que EntityAId et EntityBId, puis suivez l’appel boxStore.boxFor()[id]. C’est terminé lorsque les IDs de inline classes préservent la séparation à la compilation entre les types d’ID des entités et rejettent à la compilation un ID du mauvais type.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
kotlin
Domaine
databases
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
30/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.