objectbox / objectbox-dart

Flutter database for super-fast Dart object persistence
https://docs.objectbox.io/getting-started
Apache License 2.0
918 stars 116 forks source link

Direct change of an related object via the main saved obj. #619

Open RolandDaum opened 1 month ago

RolandDaum commented 1 month ago

Hello everybody. First of all, this is not a bug, just a question. Why is it not possible to change a value of an related object via the first object that has been saved?

@Entity()
// ignore: camel_case_types
class OB_userdata {
  @Id()
  int id = 0;

  List<String> kurse = [];
  String jahrgang = '';
  final secureCredentials = ToOne<SecureCredentials>();
}
@Entity()
class SecureCredentials {
  int id = 0;
  String username = '';
  String password = '';

  void changePassword(String newpassword) {
    this.password = newpassword;
  }

  SecureCredentials({required this.username,required this.password});
} 

Here for example I want to change the username or password which is a related/linked object of the userdata object. But in order to change anything, I have to get the SecureCredentials object as an extra variable, then change the values there and override it in the OB_userdata object (OB_userdata.secureCredentials.target = SecureCredentials(username: 'username', password: 'password');). Thats kind a complecated. In Addition the changePassword Method is also not working.

So my question is, am I blind and didn't see something or is it just the way it is and I have to accept it?

Thanks for any kind of help. R. Daum

greenrobot-team commented 3 weeks ago

Get the target object, but then instead of putting it with the parent object put it into its own box?

Changes on related objects (to-one or to-many) are not saved when putting the parent/source object. There is an exception, if the related object was not inserted, yet. Then ObjectBox will insert it. Otherwise, ObjectBox will only update the relation.

Let me know if that helps!