objectbox / objectbox/objectbox-java

Can't save same Kotlin data class multiple times with ToMany

Ouverte
#528 7 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

Issue Basics

  • ObjectBox version (are using the latest version?): 2.0.0
  • Reproducibility: always

Reproducing the bug

Description

I'm using ObjectBox to save data. When I save the same data with ToMany, it only save the first one.

I write a test, the size of result.details is 1.

Can I save multiple same data with ToMany? How can I fix it?

Thanks for answer.

ObjectBox(version:2.0.0)
Android(target sdk version:27)
Kotlin(version:1.2.60)

Code
@Test
fun orderDetailTest() {
    val orderBox: Box<Order> = store.boxFor()

    // 儲存兩個內容相同的資料
    val order = Order().apply {
        this.details.add(OrderDetail(productSpecName = "ABC"))
        this.details.add(OrderDetail(productSpecName = "ABC"))
    }

    val orderId = orderBox.put(order)

    val result = orderBox.get(orderId)

    assert(result.details.size == 2)
}

Entities

@Entity
data class Order(@Id var id: Long = 0,
                 val createTime: Long = 0,
                 val total: Int = 0) {

    @Backlink(to = "order")
    lateinit var details: ToMany<OrderDetail>
}

@Entity
data class OrderDetail(@Id var id: Long = 0,
                       val productName: String = "",
                       val productSpecName: String = "",
                       val productSpecPrice: Int = 0,
                       val quantity: Int = 0,
                       val subtotal: Int = 0) {

    lateinit var order: ToOne<Order>
}

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 reproduire le cas orderDetailTest avec les entités Order et OrderDetail présentées, puis examinez comment le backlink ToMany et la relation ToOne sont persistés. C’est terminé lorsque l’enregistrement de deux instances OrderDetail identiques donne result.details.size == 2, ou lorsque la limitation attendue est documentée.

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

Évaluation

Stack technique
android, kotlin
Domaine
database, mobile
Type d'issue
Bug
Difficulté
3/5
Temps estimé
1-2 jours
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
35/100

Recevez les nouvelles issues par e-mail

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