Um eine OneToMany-Beziehung mit Room zu erhalten, erstelle ich einen POJO mit @Embedded-Objekt und @Relation Variable.Raum: verwandte Entitäten - verwendbarer öffentlicher Konstruktor
data class SubjectView(
@Embedded
var subject: Subject,
@Relation(parentColumn = "idWeb", entityColumn = "subject_id", entity = Topic::class)
var topics: List<Topic>?
)
Aber beim Kompilieren ich diesen Fehler haben
error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type)
[...]
Tried the following constructors but they failed to match:
SubjectView(biz.eventually.atpl.data.db.Subject,java.util.List<biz.eventually.atpl.data.db.Topic>) : [subject : subject, topics : null]
Nun, das Konstruktor [Thema: Thema, Themen: null] sieht aus wie die gut ???
Wenn ich jedoch meine Klasse mit Nein-Arg-Konstruktor und All-Params-Konstruktor ändern, funktioniert es.
class SubjectView() {
@Embedded
var subject: Subject = Subject(-1, -1, "")
@Relation(parentColumn = "idWeb", entityColumn = "subject_id", entity = Topic::class)
var topics: List<Topic>? = null
constructor(subject: Subject, topics: List<Topic>?) : this() {
this.subject = subject
this.topics = topics
}
}
Ich mag möchte wissen, warum die erste (schneller) Version kompiliert nicht, da sie nicht wie die Dokumentation zeigt ist.
Standard-Argumente für alle Variablen (wie ich in einem anderen Beitrag gesehen haben könnte) in einer Konstruktor (Daten) -Klasse scheint nicht zwingend erforderlich zu sein?
Dank
Großartig, vielen Dank für diese Erklärung –
Ihre Begrüßung :-) –
Hallo! Ich verstehe Ihre Antwort nicht, weil Sie "Themen" nicht null machen. Oder wir möchten, dass "Themen" nullfähig sein können ... – Blunderer